SQL:来自子组的求和列表的最大值

SQL: Max of summed list from subgroup

我一直在寻找解决方案,发现了很多关于求和组最大值的问题,但是 none 解决了我的问题,因此我决定提出一个新问题.

我的数据分为 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|
+--------+---------+----+

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

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

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

这会 return

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

问题是我没有得到每个组的 max(n),而是单个实例。 Sektor 1 应该 return sektion a with 15 instead.

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

期望:

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

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

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)