SQL 查找 MAX 值的总和
Posted
技术标签:
【中文标题】SQL 查找 MAX 值的总和【英文标题】:SQL find SUM of MAX values 【发布时间】:2021-12-29 16:54:49 【问题描述】:我是 SQL 新手,正在为这个查询苦苦挣扎,非常感谢任何帮助。
我的桌子是这样的:
id | score | level |
---|---|---|
2 | 250 | 1 |
2 | 350 | 1 |
2 | 850 | 2 |
2 | 260 | 2 |
2 | 750 | 3 |
2 | 560 | 3 |
我想计算一个总分作为每个级别的最高分。
所以通俗地说:总分 = 第 1 级的最高分数 + 第 2 级的最高分数 + 第 3 级的最高分数
如何在 SQL 中复制它?
【问题讨论】:
到目前为止你尝试了什么? 请标记数据库平台 GROUP BY,然后对其结果求和。 我认为你使用了像SELECT *, (SELECT SUM(table.score) WHERE level = N) AS 'level_1_score'....
这样的子查询。
尝试自己编写一些东西,如果不起作用,请具体向我们展示您所做的事情,以便我们为您提供帮助。您启动它,然后我们提供帮助。我们不是为你写的。向我们展示您尝试过的实际代码,然后描述发生的事情和不正确的事情,然后我们可以从那里帮助您。如果您先自己尝试一下,您可能会非常接近答案。
【参考方案1】:
您可以在子查询的结果上使用SUM
:
SELECT
SUM(max_score) AS total_score
FROM
(
SELECT
MAX(score) AS max_score
FROM
YOUR_TABLE_NAME
GROUP BY
level
)
AS max_scores
【讨论】:
这很好用,感谢 Sash,非常感谢您的帮助。现在我也会尝试按 user_id 分组:) 没问题,乐于助人。【参考方案2】:select distinct sum(max(score)) over () as "Total Score" from T group by level;
您可以将这两个聚合与group by
一起进行,然后进行窗口总和。 Distinct
负责删除每个组重复的相同总和。 (总的来说,我会鼓励你避免过度依赖select distinct
。)
使用 CTE/派生表的其他方法非常好。初学者的解决方案可能看起来更像这样:
select t.level, sum(maxScore) as "Total Score"
from T t inner join
(select level, max(score) as maxScore from T group by level) as m
on m.level = t.level
group by t.level;
根据平台,您可能会得到它的工作
select level,
sum((select max(score) from t t2 where t2.level = t.level)) as "Total Score"
from T t
group by level
【讨论】:
【参考方案3】:您好,我认为您正在寻找此解决方案。我希望它能解决你的问题。
WITH A as (
Select MAX(score) as "MAX order" FROM "YOUR TABLE" GROUP BY level)
SELECT SUM("MAX score per level") FROM a
【讨论】:
以上是关于SQL 查找 MAX 值的总和的主要内容,如果未能解决你的问题,请参考以下文章