SQL总和,按另一个表分组

时间:2018-06-26 21:07:35

标签: sql

考虑一下,我有一个带有单独列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

2 个答案:

答案 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