一个sql求助

来源:百度知道 编辑:UC知道 时间:2024/05/19 18:46:35
数据库表如图,要求查出多个指定的consumer_id的记录,每个consumer_id只能有一个记录,有两种情况,一种是取val_a最大的,如果相等就随便取,这种情况结果就是取1、4条或2、4条,还有一种是取和,即把相同的consumer_id下的val_a和val_b加起来,在线等,急!!!!!!

----取val_a最大请参考下面的
--按name分组取val最大的值所在行的数据。
--方法1:
select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
--方法3:
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name

----------------取和
select consumer_id, sum(val_a) suma, sum(val_b) sumb
from tb
group by consumer_id

第一种情况:
SELECT a.[id],a.consumer_id,a.val_a,a.val_b FROM consumer AS a
WHERE a.[id] IN (SELECT TOP 1 [id] FROM consumer WHERE consumer_id = a.consume