如何选择小于30的数字和大于30的数字之和?

时间:2009-07-03 07:43:05

标签: sql oracle teradata

我正在尝试编写一个SELECT语句来选择字段的总和,但是我希望返回小于30的数字之和以及大于30的数字之和。我意识到我可以用两个选择加入在一起,但我希望找到一种“整洁”的方式。

3 个答案:

答案 0 :(得分:19)

沿着这些方向做某事(纠正环境的语法):

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

答案 1 :(得分:1)

如果我理解正确,你有一个具有数值的列,你想要找到字段值小于30的所有行的这个字段的总和以及字段值变化大于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

谢谢, 阿图尔

答案 2 :(得分:1)

要求是一个很大的模糊,但我会假设跨行和&lt;&gt; 30.这与案例答案不同。

SELECT
    SelectCol1, SelectCol2, SelectCol3, ..., SUM(AggregateCol)
FROM
    Table
GROUP BY
    SelectCol1, SelectCol2, SelectCol3, ...
HAVING
    SUM(AggregateCol) <> 30