MySQL的一个分组需求

Posted bisal(Chen Liu)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的一个分组需求相关的知识,希望对你有一定的参考价值。

同事提了个需求,mysql的数据库,想将system1、system2、system3的最大版本号对应的num取出来,应该怎么写SQL?

system1,system2,system3,version,num
1,2,3,v1,2
1,2,3,v2,3
1,2,3,v3,4
1,2,4,v1,2
1,2,4,v2,5

创建测试表,

create table t_version(c1 int,c2 int,c3 int,c4 varchar(10),c5 int);

最开始,写的是这条SQL语句,

(select c1, c5 from t_version where c1 = (select max(c1) from t_version) limit 1)
union all
(select c2, c5 from t_version where c2 = (select max(c2) from t_version) limit 1)
union all
(select c3, c5 from t_version where c3 = (select max(c3) from t_version) limit 1)

需求理解错了,这个是按照c1、c2、c3的最大值来计算的。

实际上需要根据"system1、system2、system3的最大版本号对应的num取出来",隐藏的含义是,按照"system1、system2、system3"分组,对应的最大版本号作为条件,如下所示,

select * from t_version
where (c1, c2, c3, c4) 
in (select c1, c2, c3, max(c4)  
from t_version
group by c1, c2, c3);

其实逻辑不复杂,写这种SQL,最重要的就是能正确理解需求,可能一个"字",就代表了不同的写法,在具备基础SQL编写能力的前提下,还是得多写,才能提升能力。

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

近期更新的文章:

减脂能吃么?

参考文献的引用格式规则

金融知识小科普 - 央行逆回购

金融知识小科普 - 做空

最近碰到的一些问题

近期的热文:

"红警"游戏开源代码带给我们的震撼

文章分类和索引:

公众号1100篇文章分类和索引

以上是关于MySQL的一个分组需求的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的一个分组需求

MYSQL分组排序

MySQL分组、排序

MySQL分组需求探秘

MySQL使用用户变量更新分组排序

MySQL实现分组排序并取组内第一条数据