我有一项任务,需要将至少有一个 topup_val
的 id_user
执行的所有 topup_val
相加,金额为 €正好15个。此任务需要在单个 SELECT
语句中解决,无需任何窗口函数或子查询(嵌套 SELECT
)。我还是 SQL 的初学者,所以我发现完成这项任务很困难。
我使用 array_agg()
将每个 id_user
的 topup_val
行转换为数组。但是,我无法使用 WHERE
子句过滤数组,因为 WHERE
子句是在聚合函数之前执行的。
非常感谢!
表格充值
id_user | topup_val
---------+-----------
1 | 10
1 | 15
1 | 5
2 | 10
2 | 10
3 | 15
3 | 15
3 | 10
转换为数组
id_user | topup_array
---------+------------------
1 | {10, 15, 5}
2 | {10, 10}
3 | {15, 15, 10}
预期结果
id_user | topup_sum
---------+------------
1 | 30
3 | 40
我的 PostgreSQL 查询
SELECT id_user, array_agg(topup_val) AS array_topup
FROM topups
WHERE 15 = ANY(array_topup)
GROUP BY id_user
ORDER BY id_user;
最佳答案
使用HAVING
而不是WHERE
。 I出现在GROUP BY
子句之后,并在聚合后计算,因此可以用于过滤聚合后的行。
关于sql - 如何在 PostgreSQL 中对整数数组进行过滤和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68165938/