假设我从多个表中获取一组行。我想知道这些行中第
x
列中值的总和,以及仅在 x
中该行满足某些附加条件的值的总和。
例如,假设我获取了:
X Y
1 0
10 0
20 100
35 100
我想要计算
x
> x
(11) 的行中所有 x
(66) 和 y
的总和。所以,我需要类似的东西:
SELECT sum(x) all_x, sum(x /* but only where x > y */) some_x FROM ...
有没有办法用 SQL 来表达它? (请注意,条件不是某些表中的单独列,我无法对其进行分组,或者至少不知道如何做到这一点。)
编辑:我使用Oracle数据库,所以依赖Oracle扩展就可以了。
您可以在
case
中使用 sum
表达式:
SELECT SUM (x) all_x,
SUM (CASE WHEN x > y THEN x ELSE 0 END) some_x
FROM my_table
您正在寻找
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 来测试此查询。
下面的查询将给出您想要的内容
select SUM(x) as x,(select SUM(x) from test5 where x>y )as 'X>Y'
from test5