質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

解決済

2回答

546閲覧

ある数のグループからN個ずつデータを抽出したい

yaoyao48

総合スコア7

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

0クリップ

投稿2018/01/25 08:22

X個グループからY個ずつデータを抽出したいSQL文は教えていただきたいです。

例:グループの数は100ぐらいがあって、グループごとのレコード数はそれぞれであり、毎回そのうちのX(例3)グループずつにデータを抽出します。そして1つのグループから最大Y個(例2)のデータを抽出します。
抽出したデータにフラグを立てて、次の抽出時に除外の条件として使います。

例:以下のテーブルがあって、毎回3グループから2個のデータを抽出します:

group name  flag

1_group 田中A          0    
1_group 佐藤A          0    
1_group 林A           0    
1_group 鈴木A           0    
1_group 牧野A           0    

2_group 平田B          0    
2_group 小林B          0    
・・・
3_group 高橋C          0    
3_group 丹羽C          0    
3_group 田中C          0    
3_group 佐藤C          0    
3_group 鈴木C          0    
3_group 吉田C          0    
・・・
4_group 高橋D          0    
4_group 丹羽D          0    
4_group 田中D          0    
4_group 佐藤D          0    
4_group 鈴木D          0    
・・・

①1回目の抽出の結果
group name flag

1_group 田中A          0    
1_group 佐藤A          0    
2_group 平田B          0    
2_group 小林B          0    
3_group 高橋C          0    
3_group 丹羽C          0    

②2回目の抽出の結果
group name flag

1_group 林A           0    
1_group 鈴木A           0    
3_group 田中C          0    
3_group 佐藤C          0    
4_group 高橋D          0    
4_group 丹羽D          0    

③3回目の抽出の結果
group name flag

1_group 牧野A          0    
3_group 鈴木C          0    
3_group 吉田C          0    
4_group 田中D          0    
4_group 佐藤D          0    

DBはSqlLiteです。

長いですが、ご教授頂ければ、ありがたいです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

投稿2018/01/25 08:51

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yaoyao48

2018/01/25 09:16

ご回答ありがとうございます。 Limitを使ってレコードの数が特定できるのが分かりました。 でも、一回複数のグループを抽出するのはどうすればいいでしょうか? 宜しくお願いします
Zuishin

2018/01/25 09:46

ただグループが 100 もあるのでは大変です。得られたデータを呼び出し側プログラムで加工する方が簡単だと思います。
guest

0

ベストアンサー

ちょっと条件が足りないと思います。同じgroup内の並び順がわかりません。
テーブル名をtablename、主キーをpkeyとしてsqlはこんな感じかと思います。
グループ3件、上位2つのデータをとる場合。

sql

1select * 2from tablename as A 3where A.pkey in ( 4 select B.pkey 5 from tablename as B 6 where B.group=A.group 7 and B.flag=0 8 order by B.pkey 9 limit 2 10) 11and A.group in ( 12 select distinct C.group 13 from tablename as C 14 where C.flag=0 15 order by C.group 16 limit 3 17)

関係ありませんがgroupという名前はやめたほうがいいと思います。
group byという語句があるので…。

投稿2018/01/25 09:30

編集2018/01/25 09:31
sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yaoyao48

2018/01/26 08:45

出来ました、ありがとうございました。 また宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問