###前提・実現したいこと
SQLで、リストの中から、条件にあわせて10件取り出すものがかけません
idが近いものの内、大きいものから5つ、小さいものから5つ取り出したいです。
その時、5つに満たなければ(つまりリストの下や上の部分)、もう片方から補完して10件取り出すようにしたいです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/23 09:15
回答3件
0
ベストアンサー
SQL文1つで抽出する考え方を記載しておきます。
SQL
1SELECT V0.抽出項目 2FROM ( 3 ( 4 SELECT '1' as sort_1_5 5 , 抽出項目 6 , ソート項目 7 , 最終ソート項目 8 FROM 抽出テーブル 9 WHERE 抽出条件 10 ORDER BY ソート項目 11 LIMIT 0, 5 -- LIMIT 5でもOK 12 ) 13 UNION ALL 14 ( 15 SELECT '1' as sort_1_5 16 , 抽出項目 17 , ソート項目 18 , 最終ソート項目 19 FROM 抽出テーブル 20 WHERE 抽出条件 21 ORDER BY ソート項目 22 LIMIT 0, 5 -- LIMIT 5でもOK 23 ) 24 UNION ALL 25 ( 26 SELECT '2' as sort_1_5 27 , 抽出項目 28 , ソート項目 29 , 最終ソート項目 30 FROM 抽出テーブル 31 WHERE 抽出条件 32 ORDER BY ソート項目 33 LIMIT 5, 5 34 ) 35 UNION ALL 36 ( 37 SELECT '2' as sort_1_5 38 , 抽出項目 39 , ソート項目 40 , 最終ソート項目 41 FROM 抽出テーブル 42 WHERE 抽出条件 43 ORDER BY ソート項目 44 LIMIT 5, 5 45 ) 46 ) V0 47ORDER BY V0.sort_1_5 48 , V0.最終ソート項目 49LIMIT 10
投稿2017/07/24 01:25
編集2017/07/30 14:57総合スコア760
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/26 12:56
2017/07/29 12:02 編集
2017/07/30 14:57
0
正直言って、済みませんがpostgresqlは使ったことがありません。
ストアドプロシジャーについて、13. ストアドプロシージャ (SQL 非標準)の記事などを参考にして以下の手順を組み立てます。
1 ストアドプロシジャーに件数の取り出し
上側の件数の取り出し
SQL
1SELECT COUNT(*) AS head FROM table_1 WHERE id > selected_id LIMIT 5;
下側の件数の取り出し
SQL
1SELECT COUNT(*) AS tail FROM table_1 WHERE id < selected_id LIMIT 5;
2 不足している際の上側と下側の取り出す数の決定と変数への代入
3 決定した件数の値で変数を指定して、1回目の回答のSELECTコマンドでレコードを取り出します。
ステップバイステップで完成まで取り組んでみましょう。
投稿2017/07/23 14:29
総合スコア2285
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
例外処理抜きならば、MYSQLならば、
sql
1SELECT * FROM 2 (SELECT * FROM table_1 WHERE id > selected_id ORDER BY id DESC LIMIT 1, 5) 3 JOIN (SELECT * FROM table_1 WHERE id < selected_id ORDER BY id LIMIT 1, 5) 4 ORDER BY id; 5
という形でしょうか。
上方か下方かどちらかが5件ない場合の振り分けは、COUNT関数とCASE句を使って振り分け直す処理が入るでしょう。
投稿2017/07/23 08:52
編集2017/07/23 09:35総合スコア2285
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。