SQL对某字段进行GROUP BY同时要获取其他字段方法

需求:需要根据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

效果图:

基础数据

常规分组

最终效果如下:

posted @ 2022-10-04 00:13  IT情深  阅读(350)  评论(0编辑  收藏  举报