我有一个表称为:consultant_project_score
它具有以下字段id
,project_id
,final_score
。我想要生成一个查询,显示每个project_id的前100个final_score。我正在使用MySQL workbench 6.3
,我无法使用任何create/insert
陈述。有什么办法可以做到这一点?MySQL:获得每个类别的前100条记录
回答
没有测试,但它应该work.The关键是产生一个行号为每个项目
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。无论如何,它产生了9百万条记录,而我只有大约2000个项目在我的数据库中,所以它应该有大约200.000条记录 –
@MarcZaharescu修复,它现在应该工作 – Mihai
这会为你工作。内部查询将通过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
这一个是没有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. MYSQL - 为表中的每个类别选择前4条记录
- 2. 为每个类别选择前10条记录
- 3. 如何在MySQL中为每个“类别”选择5条记录?
- 4. 如何从MySQL中的每个类别获取RANDOM记录?
- 5. mysql查询获取每个类别的最新记录
- 6. 每次交易插入100条记录
- 7. 从每个类别只得到1记录每一页分页
- 8. 使用Linq选择前100条记录
- 9. MySQL |如何只选择每个类别的一个记录?
- 10. 获得前5个记录每一个“组”的
- 11. 从同一表格中的每个类别中选择前n条记录
- 12. Laravel如何获得来自每个组的前3条记录的AVG值
- 13. 插入100万条记录在MySQL
- 14. 如何仅选择每个类别的一条记录?
- 15. 从DocDB的每个类别中选择随机N条记录
- 16. PHP分别识别每条记录
- 17. EF获得每个项目的记录
- 18. MSAccess:从每个类别中选择N条记录
- 19. Linq从每个类别取3条记录
- 20. 如何获得每个类别的前5名
- 21. MySQL查询从每个类别获得1个结果LEFT JOIN
- 22. 获取每个记录组的最后一条记录
- 23. 如何从表mysql获得前5条和最后1条记录?
- 24. MySQL的替换值每条记录
- 25. 如何分组并获取每个记录的每个值MYSQL
- 26. SQL - 返回前3条记录每场
- 27. 每组选择前x条记录
- 28. YII2如何获得加入后的每条记录
- 29. MySQL的 - 取得前5名的记录为每个组分组结果
- 30. MySQL为表中的每个人选择前X个记录
什么错误你得到?你试过什么? –
[在GROUP BY中使用LIMIT获得每个组的N个结果?]可能的重复(http://stackoverflow.com/questions/2129693/using-limit-within-group-by-to-get-n-results-per -group) – JimmyB