我一直在四处寻找解决方案,并找到了许多关于找到一个总和组最多的问题,但没有一个能解决我的问题,因此我决定提出一个新问题。
我的数据分为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|
+--------+---------+----+
答案 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)