MySql 分组后获取每组的最大值、最小值

文章优先发表在个人博客: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);

猜你喜欢

转载自blog.csdn.net/Tomwildboar/article/details/107396222
今日推荐