consultant_project_score
というテーブルがあります。id
,project_id
、final_score
というフィールドがあります。私は各project_idのトップ100のfinal_scoreを表示するクエリを生成したいと思います。 MySQL workbench 6.3
を使用しており、create/insert
ステートメントを使用することはできません。これを達成する方法はありますか?MySQL:各カテゴリのトップ100レコードを取得する
答えて
テストし、それはトリックはこれがあなたのために動作します
select id, project_id, final_score
from
(select id, project_id, final_score,
@rn:= if(@project_id= project_id, @rn+ 1, 1) as rn,
@project_id:= project_id as pi
from t,(SELECT @rn:=0) b
order by project_id, final_score desc) x
where x.rn<= 100;
私はあなたの質問を試みました、私は 't'はconsultant_project_scoreの略であると仮定します。とにかく私は約2000万のプロジェクトを私のDBに持っているので、それは約200.000のレコードであったはずです。 –
@MarcZaharescu固定、それは今働くべきです – Mihai
プロジェクトごとに行番号を生成することであるwork.Theべきではありません。内側のクエリはproject_id
でランクグループを生成し、外側のクエリは上位100の結果をフィルタリングします。
注:project_idとスコアの同様の組み合わせがある場合は機能しません。このフィドルを作成して2ランクを得る。
http://sqlfiddle.com/#!9/9e94d5/1
SELECT id1,
project_id,
final_score
FROM
(SELECT max(t1.id) AS id1,
t1.project_id,
t1.final_score,
count(*) AS rnk
FROM consultant_project_score t1
INNER JOIN consultant_project_score t2 ON t1.project_id=t2.project_id
WHERE t1.final_score<=t2.final_score
GROUP BY t1.project_id,
t1.final_score) t
WHERE rnk<=100
この1つはGroup BY
なしで、self join
の概念を使用しています。これは、正しい出力にあなたが得ているエラー何
SQL
SELECT cps2.id, cps2.project_id, cps2.final_score FROM
( SELECT DISTINCT project_id FROM consultant_project_score) cps1
JOIN consultant_project_score cps2
ON cps2.id IN (SELECT cps3.id FROM consultant_project_score cps3
WHERE cps3.project_id = cps1.projectid
ORDER BY cps3.final_score DESC LIMIT 100)
ORDER BY cps2.project_id ,cps2.final_score DESC
エラーコード:1235.このバージョンのMySQLは、 'LIMIT&IN/ALL/ANY/SOMEサブクエリをサポートしていません。 '\t 0.000秒 –
- 1. 各レコードのトップ詳細を取得するSQL
- 2. oracle sqlの各カテゴリでトップNのビジネスを取得するには?
- 3. 各カテゴリのトップ5のSQLクエリ
- 4. JavaScriptフィルタメソッドからトップ100オブジェクトを取得する方法
- 5. mysqlの各ゲームのトップ3の結果を得る
- 6. mysqlクエリで各グループのトップ10を得るには?
- 7. Mysqlがトップ製品を取得
- 8. SQL - 各ユーザーのトップ値を取得する(DISTINCT?)
- 9. トップ3のレコードをRで取得する
- 10. mysqlに100万レコードを挿入する
- 11. MySQLテーブルの各個人のトップXレコードを選択してください
- 12. 前年のレコードを取得するMySQL
- 13. 特定の日付範囲内のMySQLテーブル内の各レコードを取得する
- 14. 製品の各カテゴリのトップ結果を選択
- 15. Amazon Kinesis - 各シャードのレコード数を取得
- 16. node.js mySQLはレコードを取得
- 17. Youtube APIを使用して各カテゴリのトップチャンネルを取得する
- 18. SQL Server各カテゴリのニュースの数を取得する方法
- 19. mysqlからレコードを取得する
- 20. 各カテゴリのランダムな項目を取得する
- 21. PHPでMongoDBに100を超えるレコードを取得します
- 22. woocomerce - mysqlからカテゴリ画像を取得
- 23. PHP mysqlでカテゴリからデータを取得
- 24. リストから毎回100レコードを取得するC#
- 25. JSONデータから各カテゴリを取得する
- 26. テーブル内の各カテゴリからレコードを1つずつフェッチする
- 27. Laravelカテゴリを持つすべてのレコードを取得
- 28. トップ100とボトム100の値を抽出するR
- 29. は、私は最後の100個の値を取得するMySQL
- 30. SQL Serverテーブルから各カテゴリの行数を取得します
を与える必要があります?あなたは何を試しましたか? –
[グループごとにLIMITを使用してグループごとにN個の結果を得るには?](http://stackoverflow.com/questions/2129693/using-limit-within-group-by-to-get-n-results-per) -group) – JimmyB