网站制作学习网→http://www.forasp.cn/→正文:mysql 分组group by 后取前10个 前50个 前x个
字体:

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 版本可能有问题,无法运行
 

http://%77%77%77%2E%66%6F%72%61%73%70%2E%63%6E

·上一篇:Row x was cut by GROUP_CONCAT >>    ·下一篇:mysql 分割截取部分字符串 >>
推荐文章
最新文章