2017-11-22 8 views
-2

post_no列を生成し、データをグループに分割して1000個の投稿を1つのグループにまとめることができます。例えばデータ行を1000にグループ化する

、私は領域Aと領域Bの4174件の記事で3222件の総投稿を持っている場合、私はそうのような1000のにグループ分け投稿をしたい:

post_no  id region amount 
0001 - 1000 1 A  1000 
1001 - 2000 2 A  1000 
2001 - 3000 3 A  1000 
3001 - 3222 4 A  222 
0001 - 1000 5 B  1000 
1001 - 2000 6 B  1000 
2001 - 3000 7 B  1000 
3001 - 4000 8 B  1000 
4001 - 4174 9 B  174 

私は、SQLやPythonのコードを使用することを好みますこれを実装する。

+0

あなたが使用しているライブラリやDBからデータを取得する方法を提供していないため、ここで私が手助けすることができます。 COUNT()関数を使用したいと思います。 'SELECT COUNT(post_no) FROM table_name ここではstart_1000

答えて

2

UPDATE:

私はまだ多くの意味がありませんが、私はここに頼まれて質問に答えていないよと結論づけました質問を、再度読んで、私はOPをいくらか小さな方法で助ける場合に備えて、これをここに残しておきます。


私はあなたが探していたものを理解したと思います。そして私は、あなたのデータをわずかに変更して、実例を作りました。したがって、110001~111000のような値を持つpost_noの値は、1000に変更されました。これらの値がこのように表示される理由とその使用方法についての説明はありませんでした。

このサンプルでは、​​値は1000

リファレンスで割り切れるかどうかに基づいて、ご希望のamount値を得るためにあなたの基本的な操作を提供します:返し

% (Modulus) (Transact-SQL)

1つの数字の残りを別の数字で割ったもの。

サンプル

CREATE TABLE #temp 
(post_no INT, id INT, region NVARCHAR(1)); 

INSERT INTO #temp 
(post_no, id, region) 
VALUES 
(1000, 1, 'A'), 
(2000, 2, 'A'), 
(3000, 3, 'A'), 
(3222, 4, 'A'), 
(1000, 5, 'B'), 
(2000, 6, 'B'), 
(3000, 7, 'B'), 
(4000, 8, 'B'), 
(4174, 9, 'B'); 

SELECT t.post_no, 
     t.id, 
     t.region, 
     CASE WHEN t.post_no % 1000 = 0 
      THEN post_no/ROW_NUMBER() OVER (PARTITION BY t.region ORDER BY id) 
      ELSE t.post_no % 1000 
      END AS amount  
FROM #temp AS t; 

DROP TABLE #temp; 

結果:

post_no  id   region amount 
----------- ----------- ------ -------------------- 
1000  1   A  1000 
2000  2   A  1000 
3000  3   A  1000 
3222  4   A  222 
1000  5   B  1000 
2000  6   B  1000 
3000  7   B  1000 
4000  8   B  1000 
4174  9   B  174 

注:これは、さらに、単に1000年ここで、nを返すように簡略化することができる

umberは1000で割り切れますが、私は安全のためにそこに残しておきます。

+0

ありがとうございます。試してみます。 –

関連する問題