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.