mysql数据库字段如上图所示,我现在的需求是
就是按stage_id分组后,按照total由大到小递减取得前5条,
现在每一组有30条,总共有8组,
我不想用for循环,循环8次,每次取5条,大家有没有高效的sql语句,求解答
mysql数据库字段如上图所示,我现在的需求是
就是按stage_id分组后,按照total由大到小递减取得前5条,
现在每一组有30条,总共有8组,
我不想用for循环,循环8次,每次取5条,大家有没有高效的sql语句,求解答
虽然看起来很奇怪,但是我感觉这种方式效率高,易理解,易读.
select * from table where stage_id = 44 order by total limit 5
union all
select * from table where stage_id = 45 order by total limit 5
union all
select * from table where stage_id = 46 order by total limit 5
union all
select * from table where stage_id = 47 order by total limit 5
union all
select * from table where stage_id = 48 order by total limit 5
union all
select * from table where stage_id = 49 order by total limit 5
union all
select * from table where stage_id = 50 order by total limit 5
union all
select * from table where stage_id = 51 order by total limit 5
select t1.* from test t1
WHERE (select COUNT(*) from test t2 where t2.stage_id= t1.stage_id and t2.total > t1.total) < 5
ORDER BY t1.stage_id,t1.total
谢邀。对于 select top n by group
的问题,楼上的也给出了一些解决思路,我就不贴sql
了。推荐两个链接给你看看。
4 回答13.2k 阅读✓ 已解决
5 回答7.7k 阅读✓ 已解决
2 回答7.4k 阅读✓ 已解决
2 回答6.6k 阅读✓ 已解决
1 回答5.2k 阅读✓ 已解决
1 回答5k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
解释一下:where中的select是保证遍历所有记录,取每条记录与当前记录做比较,只有当table表中同一stage_id且不超过5个人的total比当前选择item的total高时,这个item就算是每组total排行的前5名。