SQL:来自子组的总计列表的最大值

时间:2015-02-18 09:31:11

标签: sql reporting-services

我一直在四处寻找解决方案,并找到了许多关于找到一个总和组最多的问题,但没有一个能解决我的问题,因此我决定提出一个新问题。

我的数据分为3个级别,数据如下:

+--------+---------+----+
| Sektor | Sektion | n  |
+--------+---------+----+
| 1      | a       | 9  |
| 1      | b       | 14 |
| 1      | a       | 6  |
| 2      | d       | 4  |
| 2      | d       | 7  |
| 2      | f       | 10 | 
| 2      | e       | 100|
| 3      | g       | 59 |
| 4      | h       | 200|
+--------+---------+----+

我想找到" sektion"每个" sektor"的最高总和n。

我尝试了一些不同的方法,但没有一个解决了我的问题。我得到的最接近的是:

select
  sektor, sektion, n
from
  table
where
  n = (select max(n) from  table i where i.sektor =  table.sektor)
GROUP BY sektor, sektion, n
ORDER BY n DESC

这将返回

+--------+---------+----+
| Sektor | Sektion | n  |
+--------+---------+----+
| 1      | b       | 14 |
| 2      | e       | 100|
| 3      | g       | 59 |
| 4      | h       | 200|
+--------+---------+----+

问题是我没有得到每个组的最大值(n),而是单个实例。 Sektor 1应该使用15返回sektion a。

我接近答案还是很远?似乎我只需要在采取最大值之前求和,但不确定如何。

所需:

+--------+---------+----+
| Sektor | Sektion | n  |
+--------+---------+----+
| 1      | a       | 15 |
| 2      | e       | 100|
| 3      | g       | 59 |
| 4      | h       | 200|
+--------+---------+----+

1 个答案:

答案 0 :(得分:0)

你可以试试下面的内容,这对我有用

Select Distinct
  sektor, Sektion, n
from
  table t
where
    n = (select max(n) from table where Sektor = t.Sektor)

再次查看你的问题,看起来你所缺少的只是你的子查询中的一个组

另外,正如您的评论建议您希望基于总和的最大值,您可能会发现这适用于该场景:

Select Sektor, Sektion, SUM(n) n
from Table t
Group by Sektor, Sektion
Having Sum(n) = (Select max(n) from (Select SUM(n) n from Table where Sektor = t.Sektor group by Sektion) a)