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,
近期更新的文章:
《减脂能吃么?》
近期的热文:
文章分类和索引:
以上是关于MySQL的一个分组需求的主要内容,如果未能解决你的问题,请参考以下文章