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

问题描述 投票:0回答:3

假设我从多个表中获取一组行。我想知道这些行中第

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扩展就可以了。

sql oracle select sum aggregate-functions
3个回答
4
投票

您可以在

case
中使用
sum
表达式:

SELECT SUM (x) all_x, 
       SUM (CASE WHEN x > y THEN x ELSE 0 END) some_x 
FROM   my_table

2
投票

您正在寻找

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
投票

下面的查询将给出您想要的内容

select SUM(x) as x,(select SUM(x) from test5 where x>y )as 'X>Y'
from test5
© www.soinside.com 2019 - 2024. All rights reserved.