MySQL-mysql 实现分组内排序

服务器管理 服务器管理 主题:1035 回复:2217

MySQL-mysql 实现分组内排序

偏爱自由 发布于 2017-08-10 字数 511 浏览 1207 回复 2

生成表的sql:

CREATE TABLE IF NOT EXISTS `employee` (
`empid` int(11) DEFAULT NULL,
`deptid` int(11) DEFAULT NULL,
`salary` decimal(10,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `employee` (`empid`, `deptid`, `salary`) VALUES
(1, 10, 5500.00),
(2, 10, 4500.00),
(3, 20, 1900.00),
(4, 20, 4800.00),
(5, 40, 6500.00),
(6, 40, 14500.00),
(7, 40, 44500.00),
(8, 50, 6500.00),
(9, 50, 7500.00);

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

清晨说ぺ晚安 2017-09-28 2 楼

我给你弄出来了,调试了一下,什么问题,下图是调试结果:

 SELECT empid,deptid,salary,rank FROM
(SELECT *,@rownum:=@rownum+1 AS rownum,IF(@pa=ff.deptid,@rank:=@rank+1,@rank:=1) AS rank,@pa:=ff.deptid
FROM
(SELECT empid,deptid,salary FROM employee GROUP BY deptid,salary ORDER BY deptid ASC, salary DESC) ff,(SELECT @rank:=0,@rownum:=0,@pa=NULL) tt) result

归属感 2017-08-23 1 楼

 SELECT a.empid, a.deptid, a.salary, count(*) as rank
FROM employee a
JOIN employee b ON a.deptid = b.deptid AND a.salary <= b.salary
GROUP BY a.deptid, a.salary
ORDER BY a.deptid asc,a.salary desc