Использование 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.