У меня есть таблица платежей, в которой есть user_id и сумма. Минимальный вывод для пользователей составляет 5 долларов США, и они могут получать любое количество платежей. Их общий баланс нигде не хранится (для простоты и избежания проблем с синхронизацией), вместо этого его можно найти, выполнив запрос:
SELECT SUM(amount)
FROM payment
WHERE user_id = 5;
Я хочу узнать общую сумму всех остатков, которые отвечают требованию на снятие средств. То, что я хотел бы сделать, это что-то вроде:
SELECT SUM(SUM(amount))
FROM payment
WHERE sum(amount) >= 5.00
GROUP BY user_id;
К сожалению, я получаю ошибку
ОШИБКА: агрегаты не разрешены в предложении WHERE
Как мне написать этот запрос? Я использую postgres 8.4.
Часть 2:
Я не уверен, что это вообще возможно, но эта таблица платежей также включает платежи, сделанные пользователем : таблица платежей включает в себя сумму, from_user_id и to_user_id. Это однократная учетная система. Было бы здорово, если бы я мог также вычесть платежи, сделанные пользователем. Псевдо-sql это:
SELECT (sum of all amounts)
WHERE (sum(amount where to_user_id = 5) - sum(amount where from_user_id = 5)) > 5.00