sql - 如何在 PostgreSQL 中过滤和求和整数数组
问题描述
我有一项任务,需要将至少有一次执行的所有topup_val
操作的总和精确到 15 欧元。此任务需要在单个语句中解决,无需任何窗口函数或子查询(嵌套)。我仍然是 SQL 的初学者,所以我发现完成这项任务很困难。id_user
topup_val
SELECT
SELECT
我使用 .topup_val
将每个行转换id_user
为数组array_agg()
。但是,我无法使用WHERE
子句过滤数组,因为WHERE
子句是在聚合函数之前执行的。
非常感谢!
桌子topups
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
子句之后,是聚合后计算的,所以可以用来过滤聚合后的行。
推荐阅读
- javascript - 路口观察员不工作 Wordpress 5.8.1
- discord.py - Discord 按钮全部同时触发。不和谐.py
- apache-kafka - 通过 kafka-avro-console-producer 和融合模式注册表使用 RecordNameStrategy
- pgbouncer - 在 Apache 上使用 pgBouncer 和 PHP 脚本
- javascript - javascript: 因子 if 语句
- algorithm - O(n) 中加权树中的最大匹配
- php - 是否有一些简单的方法可以从表单(php)编辑最后一行数据
- azure - 在支持多个环境时,使用 Azure AD 的正确方法是什么?
- python - 如何在 Scikit-learn RandomForest 中获得训练精度?
- javascript - console.log 二叉树中的节点,其子树的总和为偶数