文章优先发表在个人博客:https://www.xdx97.com/article/733451395906142208
假设这样一个场景
我们需要获取每个班分数最高的人全部信息(或者最低的人)
最后结果如下:
一、思路
先找到每个班的最高分,然后再连接查询。
1-1、获取每个班最高分的sql
SELECT MIN(score) score FROM xdx_test GROUP BY class
1-2、连接查询出想要的结果
SELECT xdx_test.*
FROM xdx_test
LEFT JOIN (SELECT MAX(score) score FROM xdx_test GROUP BY class) a
ON xdx_test.score = a.score
GROUP BY xdx_test.class
二、数据
2-1、建表语句
CREATE TABLE `xdx_test` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`class` varchar(255) DEFAULT NULL,
`score` int(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2-2、插入数据
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (1, '张三-1', '1', 1);
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (2, '李四-1', '1', 2);
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (3, '王五-1', '1', 3);
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (4, '张三-2', '2', 4);
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (5, '李四-2', '2', 5);
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (6, '王五-2', '2', 6);
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (7, '张三-3', '3', 7);
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (8, '李四-3', '3', 8);
INSERT INTO `test`.`xdx_test`(`id`, `name`, `class`, `score`) VALUES (9, '王五-3', '3', 9);