MySQL 根据某字段分组,再根据另一字段排序,取每个组内的前 n 条数据

MySQL 根据某字段分组,再根据另一字段排序,取每个组内的前 n 条数据
双木老林建表
1 | CREATE TABLE `tmp` ( |
查询 SQL
根据 name 字段进行分组,并取每个分组中 point 最大的 n 条记录:
1 | SELECT a.* FROM tmp a WHERE n > ( SELECT count( * ) FROM tmp b WHERE b.name = a.name AND b.point > a.point ) |
测试
假如现在有数据:
| id | name | point |
|---|---|---|
| 1 | 张三 | 60 |
| 2 | 张三 | 80 |
| 3 | 张三 | 90 |
| 4 | 张三 | 95 |
| 5 | 李四 | 74 |
| 6 | 李四 | 95 |
| 7 | 李四 | 82 |
| 8 | 李四 | 100 |
想要的结果是: 获得张三和李四 point 较大的前两条记录
执行 SQL ==>
1 | SELECT a.* FROM tmp a WHERE 2 > ( SELECT count( * ) FROM tmp b WHERE b.name = a.name AND b.point > a.point ) |
获得结果 ==>
| id | name | point |
|---|---|---|
| 3 | 张三 | 90 |
| 4 | 张三 | 95 |
| 6 | 李四 | 95 |
| 8 | 李四 | 100 |
评论
匿名评论隐私政策












