Попытка получить результаты на основе другой таблицы - агрегатные функции не разрешены в WHERE

Я пытаюсь написать один запрос, который будет выбирать всех пользователей на основе их суммы пожертвований из другой таблицы и упорядочивать по сумме их пожертвований. Но я получаю сообщение об ошибке. Я использую 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 для фильтрации агрегированных данных.

dnoeth 10.04.2019 14:39

Возможный дубликат используйте mysql SUM() в предложении WHERE

Nick 10.04.2019 14:41
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
2
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы отфильтровать результаты агрегации, вы должны использовать ключевое слово 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

. . . Having без GROUP BY ?

Yogesh Sharma 10.04.2019 14:40

Правильно, даже не заметил, что его не было в исходном запросе.

TheWildHealer 10.04.2019 14:42

. . . Ваш текущий синтаксис по-прежнему недействителен.

Yogesh Sharma 10.04.2019 14:43

Тогда ответьте на вопрос сами и, пожалуйста, вежливо разозлите чужие комментарии ответа

TheWildHealer 10.04.2019 14:45

@YogeshSharma: вы можете самостоятельно исправить очевидные опечатки, просто отредактировав ответ

a_horse_with_no_name 10.04.2019 14:58

Что он и сделал, изменив заодно все форматирование, поэтому я и откатился.

TheWildHealer 10.04.2019 15:02

Есть ли способ сделать это без использования наличия, может быть, с подзапросами?

Liga 10.04.2019 15:16

Есть, но они будут менее эффективны. Почему ты так хочешь?

TheWildHealer 10.04.2019 15:20

Другие вопросы по теме