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)
我一直在寻找解决方案,发现了很多关于求和组最大值的问题,但是 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)