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

效果图:

基础数据

常规分组

最终效果如下:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值