需求:需要根据ikey进行group by ,然后取各个分组value最大值的记录,同时获取对应记录的Test1,Test2的值
--建表语句
CREATE TABLE tb1(
ikey int,
value int,
Test1 varchar(20) NULL,
Test2 varchar(20) NULL,
)
drop table tb1
SELECT * FROM tb1
insert into tb1(ikey,value,Test1,Test2)
values (1,55,'AA','BB'),
(1,20,'AA1','BB1'),
(4,63,'AA2','BB2'),
(1,89,'AA3','BB3'),
(1,78,'AA4','BB4'),
(3,90,'AA5','BB5'),
(2,88,'AA6','BB6'),
(3,77,'AA7','BB7'),
(2,100,'AA8','BB8'),
(2,77,'AA9','BB9'),
(1,75,'AA10','BB10');
--需求,需要根据ikey进行group by ,然后取各个分组value最大值的记录,同时获取对应记录的Test1,Test2的值
--常规思维写法
select ikey,MAX(value) as value from tb1 group by ikey
--但是如果要再取对应最大值的Test1,Test2则比较麻烦,因为有group by 了字段,未被Group by的字段 则会提示错误,除非用max,min,avg,count进行聚合
--这样都无法取得group by后对应的记录的其它字段值。
--解决方法
select a.ikey,b.value,a.Test1,a.Test2 from tb1 a,
(
select ikey,MAX(value) as value from tb1 group by ikey
)b where a.ikey=b.ikey AND a.value=b.value
效果图:
基础数据
常规分组
最终效果如下: