SELECT  e1.id AS id ,e1.user_id, e1.score AS max_score 

FROM test_score e1  

LEFT JOIN test_score e2  

ON e1.user_id = e2.user_id AND e1.score < e2.score  

WHERE e2.score IS NULL;

相关表结构是:

CREATE TABLE `test_score` (
  `id` int NOT NULL AUTO_INCREMENT,
  `score` int DEFAULT NULL COMMENT '分数',
  `user_id` int DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `test_score` VALUES (1, 10, 1);
INSERT INTO `test_score` VALUES (2, 20, 1);
INSERT INTO `test_score` VALUES (3, 5, 1);
INSERT INTO `test_score` VALUES (4, 30, 3);
INSERT INTO `test_score` VALUES (5, 20, 3);
INSERT INTO `test_score` VALUES (6, 100, 5);
INSERT INTO `test_score` VALUES (7, 200, 5);
INSERT INTO `test_score` VALUES (8, 150, 5);

查询的结果是:

 案例二:

表结构:

CREATE TABLE `ftb_cultivate_exam_user` (
  `F_Id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
  `F_ExamId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '考试主键ID',
  `F_ExamType` tinyint DEFAULT NULL COMMENT '考试类型,0岗位学习考试,1常规考试',
  `F_UserId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户主键ID',
  `F_Duration` bigint DEFAULT NULL COMMENT '用时,单位秒',
  `F_Score` int DEFAULT NULL COMMENT '总考分',
  `F_UserStartTime` datetime DEFAULT NULL COMMENT '用户开始考试时间',
  `F_FinishTime` datetime DEFAULT NULL COMMENT '完成考试时间',
  `F_Status` tinyint NOT NULL COMMENT '考试状态(0待考试,1待批阅,2已逾期,3合格,4不合格 5、优秀)',
  PRIMARY KEY (`F_Id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='考试用户表';



SELECT
    e1.F_UserId,
    e1.F_Score AS max_score,
    e1.*
FROM
    ftb_cultivate_exam_user e1
    JOIN ( SELECT F_UserId, MAX( F_Score ) AS max_score FROM ftb_cultivate_exam_user GROUP BY F_UserId ) e2 ON e1.F_UserId = e2.F_UserId
    AND e1.F_Score = e2.max_score order by max_score desc;