Ответ 1
Как насчет этого:
select my_sum
from
(SELECT SUM(dummy) as my_sum FROM DUAL WHERE 1=2)
where
my_sum is not null
Я нахожу некоторые проблемы с запросом, который возвращает сумму поля из таблицы для всех записей, соответствующих определенным условиям. Я ожидал получить "Нет записей", когда не было записей, но вместо этого я получаю нулевой результат.
SQL> SELECT * FROM DUAL WHERE 1=2;
no rows selected
SQL> SELECT SUM(dummy) FROM DUAL WHERE 1=2;
SUM(DUMMY)
----------
SQL>
Можно ли каким-либо образом не получать запись в этом случае?
Как насчет этого:
select my_sum
from
(SELECT SUM(dummy) as my_sum FROM DUAL WHERE 1=2)
where
my_sum is not null
"Я ожидал получить" Нет записей ", когда не было записей, но вместо этого я получаю нулевой результат".
Тогда do
SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING COUNT(*) > 0
То есть укажите, что вы хотите только вернуть резюме, в котором были рассмотрены строки.
SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING SUM(dummy) IS NOT NULL
аналогичен, но COUNT (*) возвращает итоговую строку, если бы были только строки, для которых фиктивный элемент был нулевым, а последний - не был.
Вы можете отфильтровать результаты null
с помощью having
SELECT SUM(dummy) FROM DUAL WHERE 1=2 HAVING SUM(dummy) IS NOT NULL
Нет - это поведение по конструкции используемой СУБД, которая, по крайней мере, имеет смысл, поскольку вы ищете сумму, а не необработанные данные
Сумма нулевых чисел равна 0 (это математика). Таким образом, было бы естественно, если выбранная сумма (что-то) вернет 0, если нет записей для суммирования, аналогично выбору count (*), который должен возвращать 0, если счетчик равен 0 (нет записей, удовлетворяющих предикату). Это в идеальном мире, конечно.
используйте функцию coalesce mysql и выполните:
SELECT COALESCE(SUM(where),0) FROM table WHERE condition = variable
SELECT SUM(dummy) FROM DUAL GROUP BY 1
Вы можете группировать по другой метрике. Например, месяц, а затем sql также возвращает 0 строк:
SELECT SUM(dummy), DATE_FORMAT(day, '%Y-%m') as month
FROM DUAL WHERE 1=2
GROUP BY month