假设我在Oracle db中有下表:
{{1}}
我想创建一个SQL查询来返回foo + bar&lt;的总和。因此在这里我应该得到第2行和第3行,因为对于第2行,(50 + 1)<100并且对于第3行,(75 + 1)<100。 100。
我查看了SUM运算符,但是这将对列的所有行进行求和,这不是我需要的。
答案 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>
肯定有一些更好的技巧人 - 他们在数学方面比我更好 - 可能会发现。