牛客 妙解 不同岗位中位数位置的所有grade信息
1. 数据结构
-- 数据结构 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for grade -- ---------------------------- DROP TABLE IF EXISTS `grade`; CREATE TABLE `grade` ( `id` int NOT NULL, `job` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `score` int NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of grade -- ---------------------------- INSERT INTO `grade` VALUES (1, 'C++', 11001); INSERT INTO `grade` VALUES (2, 'C++', 10000); INSERT INTO `grade` VALUES (3, 'C++', 9000); INSERT INTO `grade` VALUES (4, 'Java', 12000); INSERT INTO `grade` VALUES (5, 'Java', 13000); INSERT INTO `grade` VALUES (6, 'B', 12000); INSERT INTO `grade` VALUES (7, 'B', 11000); INSERT INTO `grade` VALUES (8, 'B', 9999); SET FOREIGN_KEY_CHECKS = 1;
2.实现SQL(他人写法,思路新奇,值得记录)
1 -- abs( t1.s_rank -( t1.num + 1 )/ 2 )< 1 中位数的位置 2 -- 窗口函数应用 3 SELECT 4 id, 5 job, 6 score, 7 s_rank 8 FROM 9 ( 10 SELECT 11 *,( 12 row_number() over ( PARTITION BY job ORDER BY score DESC )) AS s_rank,( 13 count( score ) over ( PARTITION BY job )) AS num 14 FROM 15 grade 16 ) t1 17 WHERE 18 abs( t1.s_rank -( t1.num + 1 )/ 2 )< 1 19 ORDER BY 20 id;
❀❀ (ง •_•)ง little little 🦆🦆 ❀❀❀❀ ♕♕♕♕♕

浙公网安备 33010602011771号