匿名用户MySQL 用窗口函数分组排序后,怎么做能让每组只显示前3行?
MySQL 用窗口函数分组排序后,怎么做能让每组只显示前3行?
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
2条回答
默认
最新
sql外面再套一层吧,举例
create table employee(
dname varchar(20), -- 部门名
eid varchar(20),
ename varchar(20),
hiredate date, -- 入职日期
salary double -- 薪资
);
insert into employee values('研发部','1001','刘备','2021-11-01',3000);
insert into employee values('研发部','1002','关羽','2021-11-02',5000);
insert into employee values('研发部','1003','张飞','2021-11-03',7000);
insert into employee values('研发部','1004','赵云','2021-11-04',7000);
insert into employee values('研发部','1005','马超','2021-11-05',4000);
insert into employee values('研发部','1006','黄忠','2021-11-06',4000);
insert into employee values('销售部','1007','曹操','2021-11-01',2000);
insert into employee values('销售部','1008','许褚','2021-11-02',3000);
insert into employee values('销售部','1009','典韦','2021-11-03',5000);
insert into employee values('销售部','1010','张辽','2021-11-04',6000);
insert into employee values('销售部','1011','徐晃','2021-11-05',9000);
insert into employee values('销售部','1012','曹洪','2021-11-06',6000);全部分组排序
mysql> select dname, ename, salary, row_number() over(partition by dname order by salary desc) as rn from employee;+-----------+--------+--------+----+
| dname | ename | salary | rn |
+-----------+--------+--------+----+
| 研发部 | 张飞 | 7000 | 1 |
| 研发部 | 赵云 | 7000 | 2 |
| 研发部 | 关羽 | 5000 | 3 |
| 研发部 | 马超 | 4000 | 4 |
| 研发部 | 黄忠 | 4000 | 5 |
| 研发部 | 刘备 | 3000 | 6 |
| 销售部 | 徐晃 | 9000 | 1 |
| 销售部 | 张辽 | 6000 | 2 |
| 销售部 | 曹洪 | 6000 | 3 |
| 销售部 | 典韦 | 5000 | 4 |
| 销售部 | 许褚 | 3000 | 5 |
| 销售部 | 曹操 | 2000 | 6 |
+-----------+--------+--------+----+
12 rows in set (0.00 sec)
前三名
mysql> select * from ( select dname, ename, salary, row_number() over(partition by dname order by salary desc ) as rn
from employee ) a where rn<=3;
+-----------+--------+--------+----+
| dname | ename | salary | rn |
+-----------+--------+--------+----+
| 研发部 | 张飞 | 7000 | 1 |
| 研发部 | 赵云 | 7000 | 2 |
| 研发部 | 关羽 | 5000 | 3 |
| 销售部 | 徐晃 | 9000 | 1 |
| 销售部 | 张辽 | 6000 | 2 |
| 销售部 | 曹洪 | 6000 | 3 |
+-----------+--------+--------+----+
6 rows in set (0.00 sec)
评论
有用 1回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

