#mysql #conditional-statements
#mysql #условные операторы
Вопрос:
Когда я запускаю этот запрос, он работает
SELECT sum( amount ) AS balance FROM balance WHERE amount >= 100
но когда я хочу отфильтровать идентификатор пользователя, он возвращает NULL
SELECT sum( amount ) AS balance FROM balance WHERE amount >= 100 AND userid=4
Ответ №1:
Он вернет NULL, если строк нет. Если вы хотите вместо нуля использовать это:
SELECT IFNULL(SUM(amount), 0) AS balance
FROM balance
WHERE amount >= 100 AND userid = 4
Если вы считаете, что ответом должно быть что-то отличное от 0 или NULL, тогда я предлагаю вам выполнить этот запрос, чтобы дважды проверить, возвращена ли хотя бы одна строка и верны ли данные:
SELECT *
FROM balance
WHERE amount >= 100 AND userid = 4
Комментарии:
1. не имеет значения, возвращает ли оно NULL или 0. Я выполнил запрос, но изменил 100 на 20, и он возвращает строки, как ожидалось.
2. Я обнаружил проблему, я составляю сумму amount, но затем я проверяю индивидуальную сумму, только если она больше или равна 100. Итак, я изменил where на следующее, и, похоже, это работает: ГДЕ userid = 4 ГРУППИРУЕТСЯ ПО идентификатору пользователя, имеющему sum (сумму) >= 100
3. вы помогли мне найти правильный путь к ответу, поэтому я пометил его как отвеченный 🙂