考虑一下,我有一个带有单独列t1
的表a
,并且它具有值,例如
a
-
5
10
15
17
我想编写一个执行以下操作的SQL查询。基本上,我想知道所有值的总和,直到表t1
中的值。
SELECT SUM(value) FROM t2 WHERE value<=5
UNION ALL
SELECT SUM(value) FROM t2 WHERE value<=10
UNION ALL
SELECT SUM(value) FROM t2 WHERE value<=15
UNION ALL
SELECT SUM(value) FROM t2 WHERE value<=17;
如果有人更改a
中的值,例如删除或插入更多元素,则必须重写上面的查询。是否存在始终自动运行的查询?
这里是DB fiddle link。
答案 0 :(得分:1)
我认为您似乎想要:
SELECT SUM(case when bound<=a[1] then value else 0 end),
. . .
FROM table t;
用小提琴编辑后,可以使用subquery
代替UNION
:
select *, (select sum(t2.value) from t2 where t2.value <= t1.a)
from t1;
答案 1 :(得分:1)
我认为使用联接比使用子查询更清楚,而只是个人喜好。
SELECT
t1.a,
SUM(COALESCE(t2.value, 0))
FROM
t1
LEFT JOIN
t2
ON
t2.value <= t1.a
GROUP BY
t1.a