Oracle SQL:根据另一列的值从组中的行检索总和和值

时间:2013-05-07 23:06:30

标签: sql oracle11g group-by group-summaries

我正在尝试创建一个摘要查询,该查询返回每个组的数量总和以及该组中数量最多的行中的描述。

例如,如果表格如下所示:

GROUP  QTY   DESC
-----  ---   ----
1      23    CCC
1      42    AAA
1      61    BBB

2      11    ZZZ
2      53    XXX
2      32    YYY

查询将返回:

1     125    BBB   (desc from row with largest qty for group 1)
2      95    XXX   (desc from row with largest qty for group 2)

谢谢!

1 个答案:

答案 0 :(得分:0)

窗口函数row_number()是您进行此类查询的朋友。它为值分配序号。然后,您可以在聚合中使用此信息:

select group, sum(qty), max(case when seqnum = 1 then desc end)
from (select t.*,
             row_number() over (partition by group order by qty desc) as seqnum
      from t
     ) t
group by group

顺便说一下,groupdesc是列的糟糕名称,因为它们与保留字冲突。您应该重命名它们或将它们用查询中的双引号括起来。