SQL Server, как я могу использовать COUNT DISTINCT(*) в предложении HAVING?

У меня есть процедура, которая подсчитывает все уникальные значения [customerid] и отображает их в списке SELECT. Я пытаюсь отсортировать [customerid], где это только "> 1", используя предложение HAVING, но SQL не позволит мне использовать DISTINCT COUNT внутри HAVING. На мой взгляд, имеет смысл, что HAVING должен работать с COUNT, но это не так:

USE MyCompany;
GO
SELECT DISTINCT COUNT(customerid) AS NumberOfOrdersMade, customerid AS 
CustomerID
FROM tblItems_Ordered
GROUP BY customerid
HAVING DISTINCT COUNT(customerid) > 1
GO

1 ответ

Решение

Вы, вероятно, хотите SELECT COUNT(DISTINCT orderid) вместо DISTINCT COUNT(customerid):

USE MyCompany;
GO
SELECT COUNT(DISTINCT orderid) AS NumberOfOrdersMade, customerid AS
CustomerID
FROM tblItems_Ordered
GROUP BY customerid
HAVING COUNT(DISTINCT orderid) > 1
GO

Когда за пределами COUNT, DISTINCT удалит повторяющиеся строки из набора результатов, что не повлияет на ваш запрос, потому что вы делаете GROUP BY, Когда внутри COUNT, DISTINCT ограничит количество уникальными значениями столбца, который вы передаете в функцию счета. Таким образом, имеет больше смысла использовать столбец orderid вместо customerid, когда вы называете его как NumberOfOrdersMade.

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