SQL:计算所有值的总和*和*仅匹配条件的值的总和

时间:2014-11-07 10:31:00

标签: sql oracle aggregate-functions

假设我从几个表中获取一组行。我想知道这些行中x列中值的总和,以及x中满足某些附加条件的 X Y 1 0 10 0 20 100 35 100 中的值的总和。

例如,让我说我抓了:

x

我想在x>的行中获得所有x(66)和y的总和SELECT sum(x) all_x, sum(x /* but only where x > y */) some_x FROM ... (11)。所以,我需要这样的东西:

{{1}}

有没有办法在SQL中制定它? (请注意,条件不是某个表中的单独列,我不能对其进行分组,或者至少不知道如何执行此操作。)

编辑:我使用的是Oracle数据库,因此根据Oracle扩展程序是可以的。

3 个答案:

答案 0 :(得分:4)

您可以在case

中使用sum表达式
SELECT SUM (x) all_x, 
       SUM (CASE WHEN x > y THEN x ELSE 0 END) some_x 
FROM   my_table

答案 1 :(得分:3)

您正在寻找CASE运营商:

SELECT sum(X) all_x, 
       sum(CASE WHEN X>Y THEN X ELSE 0 END) some_x 
FROM Table1

在这种情况下(没有双关语)你会得到11 some_x 您可以在X>Y之后使用您想要的任何条件而不是WHEN,并选择任何值而不是X

SQL fiddle来测试此查询。

答案 2 :(得分:2)

以下查询将提供您想要的内容

select SUM(x) as x,(select SUM(x) from test5 where x>y )as 'X>Y'
from test5