Как получить «0» из функции SUM MySQL, когда значения не существуют
Функция SUM в MySQL предлагает удобный способ агрегирования числовых значений ценности. Однако если во время запроса не найдено ни одной совпадающей строки, функция СУММ обычно возвращает значение NULL. В некоторых случаях более желательно возвращать «0» вместо NULL.
Использование COALESCE для решения проблемы
Решение этой проблемы заключается в функция ОБЪЕДИНЕНИЕ. COALESCE позволяет указать значение по умолчанию, которое будет возвращено, когда первый аргумент принимает значение NULL.
Рассмотрим следующий пример:
SELECT COALESCE(SUM(Column_1),0) FROM Table WHERE Column_2 = 'Test'
В этом запросе COALESCE использует функцию SUM. Если СУММА Столбца_1 для строк, где Столбец_2 равен «Тест», возвращает значение NULL, COALESCE вместо этого предоставит «0».
Демонстрация и дополнительная информация
Посетите http ://www.sqlfiddle.com/#!2/d1542/3/0 для живой демонстрации решения.
Чтобы углубиться в нюансы COALESCE, рассмотрите следующий сценарий, включающий три таблицы с разными распределения значений:
Применив следующий запрос:
SELECT 'foo' as table_name, 'mixed null/non-null' as description, 21 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM foo UNION ALL SELECT 'bar' as table_name, 'all non-null' as description, 21 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM bar UNION ALL SELECT 'baz' as table_name, 'all null' as description, 0 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM baz
Вы получите следующие результаты:
TABLE_NAME | DESCRIPTION | EXPECTED_SUM | ACTUAL_SUM |
---|---|---|---|
foo | смешанное значение NULL/NULL | 21 | 21 |
бар | все ненулевые | 21 | 21 |
baz | all null | 0 | 0 |
Как вы можете видеть, функция COALESCE эффективно возвращает '0' для ' baz', где все значения равны NULL.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3