MySQL 用gourp by分组后取某一字段最大值
MySQL 用gourp by分组后取某一字段最大值、最新数据
- 一、业务说明
- 二、问题复现
- 三、解决办法
- 1.先取出姓名、最大分数
- 2.把上面查询的数据作为临时表与原表关联查询
一、业务说明
大家在日常开发中不可避免遇到对某个表分组后取最大值、最新值等业务需求,这就涉及到group by、max函数。 举个例子:
SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(36) DEFAULT NULL,`subject` varchar(36) DEFAULT NULL,`score` int(10) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('1', '张三', '语文', '92');
INSERT INTO `score` VALUES ('2', '张三', '数学', '100');
INSERT INTO `score` VALUES ('3', '李四', '语文', '95');
INSERT INTO `score` VALUES ('4', '李四', '数学', '75');
INSERT INTO `score` VALUES ('5', '王五', '语文', '85');
INSERT INTO `score` VALUES ('6', '王五', '数学', '96');
INSERT INTO `score` VALUES ('7', '张三', '英语', '99');
INSERT INTO `score` VALUES ('8', '李四', '英语', '76');
INSERT INTO `score` VALUES ('9', '王五', '英语', '99');
这里有个业务:取出每个人的单科最好成绩。
二、问题复现
我个人首先想到的sql是:
select name,subject,max(score) from score group by name
运行结果却是:
大家可以看到,名字和分数没错,但科目却都是语文。显然与实际不符!(group by 默认取第一条数据)
注:
我这里又试了一下先进行排序,再分组取值,但结果还是和上面一样
select temp.name,temp.subject,max(temp.score)
from (select * from score order by score desc) temp
group by temp.name
三、解决办法
1.先取出姓名、最大分数
select name,max(score) from score group by name
2.把上面查询的数据作为临时表与原表关联查询
select temp_b.name,temp_b.subject,temp_b.score
from(select name,max(score) score from score group by name) temp_ainner join score temp_b
on temp_a.name = temp_b.name and temp_a.score = temp_b.score
最后的结果为:
问题解决,希望可以帮助到大家。如果大家有更好的解决方案,欢迎评论区留言。
MySQL 用gourp by分组后取某一字段最大值相关推荐
- mysql分组取所有数据_mysql 分组后取每个组内最新的一条数据
首先,将按条件查询并排序的结果查询出来. mysql> select accepttime,user,job from tuser_job where user =8 order by acce ...
- oracle求一行多列最大值,Oracle分组后取某列最大值的行数据
select * from ( select last_comment, row_number() over(partition by employeeid,roadline,stationname ...
- oracle 取分组第一行,oracle分组后取每组第一条数据
oracle 分组后取每组第一条数据 '数据格式 分组取第一条的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER ...
- 获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...
- java8stream根据对象属性分组后取一个对象
java8stream根据对象属性分组后取一个对象 实例: Map<String, MltContractDayPower> dayPowerMap = mltContractDayPow ...
- JAVA使用stream对数据分组后求每组的最大值
JAVA stream对数据分组后求每组的最大值 具体需求 对industryCode分组,然后通过取出每组的num的最大值 // 实体类 @Data @AllArgsConstructor publ ...
- MySQL分组后取每一组第N条数据
1.知识点 group_concat()函数:聚合函数 1.功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果. 2.语法:group_concat( [distinct] 要 ...
- mysql分组取出每组地一条数据_MySQL 分组后取每组前N条数据
与oracle的rownumber() over(partition by xxxorder by xxx)语句类似,即:对表分组后排序 创建测试emp表 DROP TABLE IF EXISTS e ...
- MySQL 分组后取最新记录
业务场景: 取一张表里面最新的一条数据,以最新的一条数据为基准进行相关业务操作. 创建我们需要的测试表 create table my_test (id int auto_incrementprima ...
最新文章
- python界面长什么样子-这可能是最好玩的python GUI入门实例(推荐)
- 关于MonoBehaviour的单例通用规则
- pip配置永久国内源
- 【Tools】VMware Workstation 15.5 Pro安装详解
- v-if和v-show
- 在java面向对象编程中_谈一谈你对封装_继承_多态概念的理解_Java新职篇:面向对象编程的3个原则是什么?...
- 115怎么利用sha1下载东西_618“甩”度娘,拥抱115,体验和价格才是王道
- OptaPlanner –具有真实道路距离的车辆路线
- CListControl的OnMouseMove和OnNcHitTest
- mysql 存储过程复杂查询_SQL分页存储过程 支持连接查询等复杂的SQL
- sem_timedwait的用法
- OpenGL.Superbible.7th.Edition(openGL超级宝典第七版)随书例子运行
- 大学学习历程简单总结
- 高分子专业计算机建模,高分子与计算机模拟.doc
- 现代汉语句子成分分析
- 微型计算机鼠标连接,解决无线鼠标重新对码问题
- cdlinux 0.9.8_Cdlinux的GNU / Linux发行版0.9.6.1版
- Ilog、Drools、Jess规则引擎的Rule Language 比对
- 网狐荣耀需要什么服务器系统,网狐荣耀环境搭建教程
- c++课程设计日历记事本