-- 链接 LINK: https://www.nowcoder.com/practice/d2b7e2a305a7499fb310dc82a43820e8?tpId=82&rp=1&ru=%2Fexam%2Foj&qru=%2Fexam%2Foj&sourceUrl=%2Fexam%2Foj%3Fdifficulty%3D5%26page%3D1%26pageSize%3D50%26search%3D%26tab%3DSQL%25E7%25AF%2587%26topicId%3D82&difficulty=5&judgeStatus=&tags=&title=&gioEnter=menu -- 标题 TITLE: SQL285 获得积分最多的人(三) -- 日期 DATE: 2023-02-25 /* 设计思路 **/ -- 题解 SQL SELECT T1.id, T1.name, T2.grade_num FROM user T1 INNER JOIN ( SELECT user_id, SUM(IF(type = 'add', grade_num, -1 * grade_num)) AS grade_num, MAX(SUM(IF(type = 'add', grade_num, -1 * grade_num))) OVER() AS grade_num_max FROM grade_info GROUP BY user_id ) T2 ON T2.grade_num = T2.grade_num_max AND T1.id = T2.user_id ORDER BY T1.id ; -- 数据 DATA =================================================== drop table if exists user; drop table if exists grade_info; CREATE TABLE user ( id int(4) NOT NULL, name varchar(32) NOT NULL ); CREATE TABLE grade_info ( user_id int(4) NOT NULL, grade_num int(4) NOT NULL, type varchar(32) NOT NULL ); INSERT INTO user VALUES (1,'tm'), (2,'wwy'), (3,'zk'), (4,'qq'), (5,'lm'); INSERT INTO grade_info VALUES (1,3,'add'), (2,3,'add'), (1,1,'reduce'), (3,3,'add'), (4,3,'add'), (5,3,'add'), (3,1,'reduce');