Как получить «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 | ОПИСАНИЕ | EXP ECTED_SUM | ACTUAL_SUM |
---|---|---|---|
foo | смешанный null/non-null | 21 | 21 |
бар | все ненулевое | 21 | 21 |
baz | все пустое | 0 | 0 |
Как видите, Функция COALESCE эффективно возвращает «0» для таблицы «baz», где все значения равны NULL.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3