MySQL的一个分组需求

2022-11-30 14:44:16 浏览数 (1)

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

代码语言:javascript复制
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

创建测试表,

代码语言:javascript复制
create table t_version(c1 int,c2 int,c3 int,c4 varchar(10),c5 int);

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

代码语言:javascript复制
(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"分组,对应的最大版本号作为条件,如下所示,

代码语言:javascript复制
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篇文章分类和索引

0 人点赞