用SQL实现排名的几种方式
1 DROP TABLE IF EXISTS `salaries`; 2 CREATE TABLE `salaries` ( 3 `emp_no` int NOT NULL, 4 `salary` int NOT NULL, 5 `from_date` date NOT NULL, 6 `to_date` date NOT NULL, 7 PRIMARY KEY (`emp_no`, `from_date`) USING BTREE 8 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; 9 10 -- ---------------------------- 11 -- Records of salaries 12 -- ---------------------------- 13 INSERT INTO `salaries` VALUES (10001, 88958, '2002-06-22', '9999-01-01'); 14 INSERT INTO `salaries` VALUES (10002, 72527, '2001-08-02', '9999-01-01'); 15 INSERT INTO `salaries` VALUES (10003, 43311, '2001-12-01', '9999-01-01'); 16 INSERT INTO `salaries` VALUES (10004, 72527, '2001-12-01', '9999-01-01');
1.牛客SQL练习(所有员工的薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列)
-- SQL编程(不大懂) SELECT emp_no, salary, @rankno := @rankno + ( @pre > ( @pre := salary )) AS t_rank FROM salaries, ( SELECT @rankno := 1, @pre := - 1 ) AS r ORDER BY salary DESC; -- 开窗函数(注意对比row_number()函数) SELECT emp_no, salary, dense_rank() over (ORDER BY salary desc ) t_rank FROM salaries ORDER BY t_rank, emp_no ASC -- 自连接 SELECT s2.emp_no, s2.salary, COUNT( DISTINCT s1.salary ) t_rank FROM salaries s1, salaries s2 WHERE s1.salary >= s2.salary GROUP BY s2.emp_no ORDER BY t_rank , s2.emp_no ASC;
结果要求:
❀❀ (ง •_•)ง little little 🦆🦆 ❀❀❀❀ ♕♕♕♕♕

浙公网安备 33010602011771号