mysql 分组group by 后取前10个 前50个 前x个
http://www.forasp.cn/ 2023/4/14 21:34:09 点击:不统计
http://%77w%77%2E%66%6F%72%61%73%70%2E%63n网站制作学习
在做实际业务中,有用到 mysql分组后获取前10,或者前50 或 前100 个的数据,那么sql 怎么写呢?
比如 在实际业务,取一个学校的 各个科目的 前10名同学
假定有表 stuedent_score 学生成绩表
+------+--------+------------+-------+
| id | name | class_name | score |
+------+--------+------------+-------+
| 1 | 张三 | 数学 | 70 |
| 2 | 李四 | 语文 | 81 |
| 3 | 王武 | 数学 | 98 |
| 4 | 张三 | 语文 | 56 |
......
......
+------+--------+------------+-------+
要获取每个科目的前10名,通过group by 分组获取第一名
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY class_name ORDER BY score desc) AS row_num
FROM stuedent_score
) subquery
WHERE row_num < 2
GROUP BY class_name ;
这样就取得了每个科目第一名.
+------+--------+------------+-------+---------+
| id | name | class_name | score | row_num |
+------+--------+------------+-------+---------+
| 3 | 王武 | 数学 | 98 | 1 |
| 2 | 李四 | 语文 | 81 | 1 |
+------+--------+------------+-------+---------+
以上就是通过groupby 获取前n个
部分mysql 版本可能有问题,无法运行
部分mysql 版本可能有问题,无法运行
http://%77%77%77%2E%66%6F%72%61%73%70%2E%63%6E