Oracle查询根据两列值的总和获取所有条目

时间:2018-02-04 10:26:48

标签: sql oracle select

假设我在Oracle db中有下表:

{{1}}

我想创建一个SQL查询来返回foo + bar&lt;的总和。因此在这里我应该得到第2行和第3行,因为对于第2行,(50 + 1)<100并且对于第3行,(75 + 1)<100。 100。

我查看了SUM运算符,但是这将对列的所有行进行求和,这不是我需要的。

3 个答案:

答案 0 :(得分:2)

sum将表达式与多行相加。要在行中添加值,您只需使用算术+运算符:

SELECT *
FROM   mytable
WHERE  foo + bar < 100

答案 1 :(得分:2)

SELECT * FROM xxx WHERE foo + bar <100;

答案 2 :(得分:1)

只是为了娱乐,还有其他一些选择。

一个简单的否定一个:

SQL> with test (id, foo, bar) as
  2  (select 1, 100, 1 from dual union
  3   select 2, 50,  1 from dual union
  4   select 3, 75,  1 from dual union
  5   select 4, 200, 1 from dual
  6  )
  7  select *
  8  from test
  9  where not (foo + bar) >= 100
 10  order by id;

        ID        FOO        BAR
---------- ---------- ----------
         2         50          1
         3         75          1

SQL>

select *
from test
where (foo + bar) / 100 < 1;

稍微更多输入,其中包含您的

  

我看了SUM运算符......

意图(虽然,SUM是一个函数,而不是一个运算符):

SQL> with test (id, foo, bar) as
  2  (select 1, 100, 1 from dual union
  3   select 2, 50,  1 from dual union
  4   select 3, 75,  1 from dual union
  5   select 4, 200, 1 from dual
  6  ),
  7  all_in_1 as
  8  (select id, foo foobar from test
  9   union all
 10   select id, bar from test
 11  )
 12  select t.id, t.foo, t.bar
 13  from test t
 14  where t.id in (select a.id
 15                 from all_in_1 a
 16                 group by a.id
 17                 having sum(a.foobar) < 100
 18                )
 19  order by t.id;

        ID        FOO        BAR
---------- ---------- ----------
         2         50          1
         3         75          1

SQL>

肯定有一些更好的技巧人 - 他们在数学方面比我更好 - 可能会发现。