【发布时间】:2010-11-07 20:57:12
【问题描述】:
我正在尝试编写一个 SELECT 语句来选择字段的总和,但我想返回小于 30 的数字的总和以及大于 30 的数字的总和。我意识到我可以通过加入两个选择来做到这一点在一起,但我希望找到一种“整洁”的方式。
【问题讨论】:
-
如果总和等于 30,我认为你对任何事情都不感兴趣。
-
跨行求和?你的意思是真的“ 30”吗?
我正在尝试编写一个 SELECT 语句来选择字段的总和,但我想返回小于 30 的数字的总和以及大于 30 的数字的总和。我意识到我可以通过加入两个选择来做到这一点在一起,但我希望找到一种“整洁”的方式。
【问题讨论】:
这些方面的内容(更正您的环境的语法):
SELECT
sum(case when Field < 30 then Field else 0 end) as LessThan30,
sum(case when Field > 30 then Field else 0 end) as MoreThan30
FROM
DaTable
【讨论】:
这个要求很模糊,但我假设 SUM 跨行和 30。这与案例答案不同。
SELECT
SelectCol1, SelectCol2, SelectCol3, ..., SUM(AggregateCol)
FROM
Table
GROUP BY
SelectCol1, SelectCol2, SelectCol3, ...
HAVING
SUM(AggregateCol) <> 30
【讨论】:
如果我理解正确,您有一个包含数值的列,并且您想为字段值小于 30 的所有 thw 行查找该字段的总和,并且与字段值的变化大于 30 的条件相同. 如果这是正确的,那么您可以使用下面的查询并相应地复制表和列名。
SELECT SUM(CASE WHEN col1 < 30 THEN COL1 ELSE 0 END
) SUM(CASE WHEN col1 < 30 THEN COL1 ELSE 0 END
) FROM DATABASE.SCHEMANAME.TABLE
谢谢, 阿图尔
【讨论】: