暂无图片
MySQL 用窗口函数分组排序后,怎么做能让每组只显示前3行?
我来答
分享
暂无图片 匿名用户
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

学习了,赞!

暂无图片 评论
暂无图片 有用 2
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏