sql - 如何在 PostgreSQL 中对整数数组进行过滤和求和

标签 sql arrays postgresql aggregate-functions

我有一项任务,需要将至少有一个 topup_valid_user 执行的所有 topup_val 相加,金额为 €正好15个。此任务需要在单个 SELECT 语句中解决,无需任何窗口函数或子查询(嵌套 SELECT)。我还是 SQL 的初学者,所以我发现完成这项任务很困难。

我使用 array_agg() 将每个 id_usertopup_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/

相关文章:

sql - 如果条件在两个表的行中匹配,则创建返回 id 的查询

javascript - 根据数组或对象项的数量设置背景图像

javascript - 如何将两个数组组合成一个具有键值对的对象?

使用 %s 时无法访问数组的第一个下标,但可以使用 %c

sql - 无法终止的 Oracle session 正在等待 "SQL*Net message from client"事件

postgresql - 如何使用 GORM 存储嵌入式结构?

database - 按随机排序() : how many rows can a table hold before becoming the worst solution?

sql - Mysql:何时使用:删除表,截断表,从表中删除

mysql 数据库架构

SQL - 为什么参数被修剪