Использование COUNT(DISTINCT myfield)

Я озадачен запросом SELECT, который я пытаюсь сделать. В основном мой файл имеет одну или несколько записей на счет-фактуру, показывая его регион. Я хочу узнать, сколько счетов в каждом регионе.

Вот пример моей таблицы Table1

InvNo   Region
A1      1
A2      3
A3      2
A4      1
A5      1
A6      2

Запуск следующего кода SQL дает мне то, что я хочу, НО включает одну дополнительную запись, которую я не ожидаю - и не хочу, по-видимому, для пустой области. Я не могу понять, почему возникает этот ряд.

SELECT Region, COUNT(DISTINCT Invno) as count
    FROM table1
    GROUP BY Region

Вот вывод

Region  count
        0       ' I do not want this row!
1       3
2       2
3       1

Должен ли я перефразировать код? Или это может быть проблема с платформой SQL, которую я использую (VistaDB)?

ОБНОВЛЕНИЕ Код работает нормально, если я не вызываю мой новый столбец count но myCount то есть это работает COUNT(DISTINCT Invno) as myCount, Это напоминает мне, что нужно всегда быть осторожным с именем, которое вы даете переменным и т. Д.

3 ответа

Попробуй это

SELECT Region, COUNT(DISTINCT Invno) as count
FROM table1
GROUP BY Region
HAVING COUNT(DISTINCT Invno) > 0

У вас есть ряд, где region а также inv_no оба NULL (по крайней мере inv_no является). Вы можете просто отфильтровать это:

SELECT Region, COUNT(DISTINCT Invno) as count
FROM table1
WHERE Invno is not null
GROUP BY Region;

Он отлично работает для меня.

Я пробовал это с InvNo и нулевой областью, и с нулевым InvNo, и нулевым, и даже с областью = 0. Счетчик никогда не возвращает ноль, поэтому я бы сказал, что это особенность с vistadb. Но я тестировал на MySQL, а не на vistadb.

Другие вопросы по тегам