首页> 文章> 详情

MySQL group by 后取最大(小)值记录

教程分享 (644) 2024-04-17 12:50:54

测试数据

测试数据

测试数据SQL:

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '姓名',
`age` int(3) NULL DEFAULT 0 COMMENT '年龄',
`c_class` int(4) NULL DEFAULT 0 COMMENT '班级',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
 
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三', 22, 1);
INSERT INTO `student` VALUES (2, '李四', 26, 1);
INSERT INTO `student` VALUES (3, '王五', 20, 2);
INSERT INTO `student` VALUES (4, '赵六', 20, 2);
INSERT INTO `student` VALUES (5, '孙七', 22, 3);
INSERT INTO `student` VALUES (6, '李八', 28, 3);
INSERT INTO `student` VALUES (7, '阿九', 28, 3);

 

需求:查询每个班级年龄最大的学生

 

方法一:排序+limit实现

-- 方法一:通过排序+limit (注意limit必须加否则不会排序)
SELECT * from (
SELECT * from student a order by a.age desc,a.c_class asc LIMIT 99999999
)tmp GROUP BY tmp.c_class;

查询结果:

查询结果

 

方法二:排序+having函数实现

-- 方法二:使用having函数
SELECT * from (
SELECT * from student a WHERE age >1  HAVING 1 order by a.age desc,c_class asc
)tmp GROUP BY tmp.c_class;

提示:这里的where age>1 是标注条件写的地方,实际可有可无根据需求来。

查询结果:

结果2

 

两种方式都能查询出来。

 

注意:不要使用max() 或者min()函数,查出来数据不对。

 

 

 

https://www.leftso.com/article/1698631337939832833.html

相关文章
测试数据 测试数据SQL: DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(10) UNSIGNED ...
在我们使用MySQL的时候总是会遇到各种各样的报错,让人头痛不已。其中有一种报错,sql_mode=only_full_group_by,在升级MySQL 5.
表数据准备Table: Subject_Selection ​ Subject   Semester   Attendee --------------------------------- I...
having的用法having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前
sql求某一列的最大值减去最小值的差
sql
函数使用mysql&gtl; explain SELECT a.custid, b.score, b.xcreditscore, b.lrscore FROM( SELECT DISTINCT ...
在导入sql备份文件到MySQL数据库中,无论物理机安装MySQL还是docker环境安装的MySQL,思路是一样的。首先,登录进入MySQL如果是物理的,则直接执行命令mysql-u-p&gt...
问题Caused by: java.sql.BatchUpdateException: Data truncation: Incorrect datetime value: '1955-05-0...
前言使用max()和min()方法在可获取元素的集合(例如列表,集合或数组)中查找最大(或最小)值
mysql索引的使用基础知识摘录。
MySQL索引优化,MySQL索引类型,MySQL索引怎么用MySQL索引怎么创建这里将会通过一些简单得sql进行讲解
java 8 stream 多字段排序,本例子主要使用stream进行多个字段的排序,使用了 comparators和Comparator.thenComparing()方法。比较器之间返回一个...
由于某些原因,数据库某个表某个字段可能会很大。大了就会引发一个问题,默认的数据库单子段大小是有限制的。版本不同限制的默认值不同。拿我的MySQL 5.6 来说安装后默认的配置是单子段4MB大小
MySQL分页_MySQL分页语句_MySQ如何使用limit分页,本博客将会详细讲解mysql中的分页查询。讲清楚MySQL如何编写分页查询语句。
运行篇命令:# docker run -d -v /jenkins/mysql55:/var/lib/mysql -p 3306:3306 --name mysql55 -e MYSQL_ROO...