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
子句,查询将失败。