我一直试图解决这个问题,所以非常感谢这里的一些帮助。
基本上我有一个数据库表,例如:
我试图得到以下结果:
Id | Name | Total
------------------------
590954 | ABC | 825.00
所以我需要该组中具有最大值的行(即ABC),名称和值的总和(对于该组 - ABC)。
还有更多行具有不同的名称。
提前致谢。
编辑(添加一些SQL来帮助):
declare @Test table
( Id int
, Name nvarchar(20)
, Value decimal(10,2)
)
insert into @Test values (590954, 'ABC', 525)
insert into @Test values (592332, 'ABC', 300)
insert into @Test values (1, 'DEF', 100)
insert into @Test values (2, 'DEF', 250)
select * from @Test
我试图获得的结果是这两行:
Id | Name | Total
------------------------
590954 | ABC | 825.00
2 | DEF | 350.00
请帮我写下所需的查询。
答案 0 :(得分:4)
这通常使用row_number()
:
select t.*
from (select t.*, row_number() over (partition by name order by value desc) as seqnum,
sum(value) over (partition by name) as sumvalue
from t
) t
where seqnum = 1;
答案 1 :(得分:4)
您可以尝试以下查询:
select t1.id, t1.name, t2.Total
from table1 t1
join(SELECT name, MAX(Value) as max_Value, SUM(Value) as Total
FROM Table1 GROUP BY name) t2
on t1.name=t2.name and t1.Value=t2.max_Value
要理解查询:派生表别名为t2
,其中包含字段name
,最大Value
和Value
的总和每组。然后它与主表table1
结合使用此条件t1.name=t2.name and t1.Value=t2.max_Value
,确认只选择每个组中包含最大Value
的记录。
答案 2 :(得分:2)
以下是与您的要求类似的示例代码
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘dbWriteTable’
for signature ‘"MySQLConnection", "grouped_df", "character"’
答案 3 :(得分:1)
这可以使用Window功能完成。类似于Gordon Linoff的回答,但我更改了sum(value)中的分区以获得正确的答案:
select t.*
from (select t.*, row_number() over (partition by name order by value desc) as seqnum,
sum(value) over (partition by name) as sumvalue
from @Test t
) t
where seqnum = 1;