sql - 尝试根据另一个表获取结果 - WHERE 中不允许使用聚合函数

标签 sql postgresql

我正在尝试编写一个查询,该查询将根据他们从另一个表中的捐赠总额选择所有用户,并按他们的捐赠总额排序。但是我收到一个错误。我正在使用 postgres,但我想这同样适用于 mysql。

ERROR:  aggregate functions are not allowed in WHERE
LINE 8:  sum(donations.donation) = 400
         ^

用户

id |   username   |
1     Larry Page
2     Sergey Brin

捐款

id | user_id | donation |     date
1      1         100       2019-02-12
2      1         200       2019-02-13
3      2         500       2019-01-15
4      1         100       2019-04-10

这是我的问题

select
    users.username, sum(donations.donation) as donation_sum
from
    users
inner join donations
    on users.id = donations.user_id
where
    sum(donations.donation) = 400
and
    donations.date between '2019-01-01' and '2019-12-31'
order by
    donation_sum

我期待的结果是这样的

username    |  donation_sum
Larry Page        400

最佳答案

要过滤聚合结果,您必须使用关键字HAVING:

select
    users.username, sum(donations.donation) as donation_sum
from
    users
inner join donations
    on users.id = donations.user_id
where
    donations.date between '2019-01-01' and '2019-12-31'
group by
    users.username
having
    sum(donations.donation) = 400
order by
    donation_sum

关于sql - 尝试根据另一个表获取结果 - WHERE 中不允许使用聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55612782/

相关文章:

sql - 将 MAX 与多个表一起使用

sql - 总是四舍五入到特定的小数位?

ruby-on-rails - PostgreSQL + Rails 并发说明

ruby-on-rails - 使用 Rails 进行不区分大小写的 Postgres 搜索

php - 使用php从mysql数据库中选择特定内容

sql - 如果左联接返回任何行,则返回 '1'的更好方法?

sql - 对表进行重复数据删除的最佳方法是什么?

mysql - 帮助完成此搜索查询

postgresql - 由于含糊不清的隐式,无法将 MappedProjection 转换为 ProvenShape

postgresql - 从 CSV 导入 PSQL 添加附加字符