假设我从几个表中获取一组行。我想知道这些行中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扩展程序是可以的。
答案 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