SQL:计算所有值之和*和*仅值之和匹配条件
假设我从几个表中获取一组行。我想知道这些行中SQL:计算所有值之和*和*仅值之和匹配条件,sql,oracle,aggregate-functions,Sql,Oracle,Aggregate Functions,假设我从几个表中获取一组行。我想知道这些行中x列中的值的总和,以及在x行中满足某些附加条件的值的总和 例如,假设我获取了: X Y 1 0 10 0 20 100 35 100 我想得到所有x(66)和x的总和,其中xy(11)。所以,我需要像这样的东西: SELECT sum(x) all_x, sum(x /* but only where x > y */) some_x FROM ... 有没有一种方法可以在SQL中表达这一点?(请注意,该条件在某些表中不是单独
x
列中的值的总和,以及在x
行中满足某些附加条件的值的总和
例如,假设我获取了:
X Y
1 0
10 0
20 100
35 100
我想得到所有x
(66)和x
的总和,其中x
y
(11)。所以,我需要像这样的东西:
SELECT sum(x) all_x, sum(x /* but only where x > y */) some_x FROM ...
有没有一种方法可以在SQL中表达这一点?(请注意,该条件在某些表中不是单独的列,我无法对其进行分组,或者至少不知道如何进行分组。)
编辑:我使用Oracle数据库,因此根据Oracle扩展就可以了。您可以在
总和
中使用大小写
表达式:
SELECT SUM (x) all_x,
SUM (CASE WHEN x > y THEN x ELSE 0 END) some_x
FROM my_table
您正在寻找
案例
操作员:
SELECT sum(X) all_x,
sum(CASE WHEN X>Y THEN X ELSE 0 END) some_x
FROM Table1
在这种情况下(没有双关语),对于some\ux
您可以在WHEN
之后使用所需的任何条件而不是X>Y
,并选择任何值而不是X
测试此查询。下面的查询将给出您想要的内容
select SUM(x) as x,(select SUM(x) from test5 where x>y )as 'X>Y'
from test5
谢谢,我猜这很简单。一旦Stackoverflow允许,我将接受。不是在Oracle中。Sql Server是的,可能是其他数据库,但Oracle会认为您试图在第二列上分组,而没有指定
group BY
子句,查询将失败。