[英]SELECT COUNT(DISTINCT… ) error on multiple columns?
我有一個表,VehicleModelYear,包含列id,年份,品牌和模型。
以下兩個查詢按預期工作:
SELECT DISTINCT make, model
FROM VehicleModelYear
SELECT COUNT(DISTINCT make)
FROM VehicleModelYear
但是,此查詢不起作用
SELECT COUNT(DISTINCT make, model)
FROM VehicleModelYear
很明顯,答案是第一個查詢返回的結果數,但只是想知道這個語法有什么問題或者為什么它不起作用。
SQL Server
COUNT()
接受以下語法
COUNT(*)
COUNT(colName)
COUNT(DISTINCT colName)
您可以擁有一個子查詢,該子查詢返回您可以計算的唯一一組make
和model
。
SELECT COUNT(*)
FROM
(
SELECT DISTINCT make, model
FROM VehicleModelYear
) a
最后的“a”不是拼寫錯誤。 它是一個別名,沒有它,SQL將給出錯誤ERROR 1248 (42000): Every derived table must have its own alias
。
嘗試將它們組合到一個字段中:
SELECT COUNT(DISTINCT make + ' ' + model)
FROM VehicleModelYear
語法是有效的SQL,但尚未在SQL-Server中實現。
嘗試重寫:
; WITH cte AS
( SELECT DISTINCT make, model
FROM VehicleModelYear
)
SELECT COUNT(*) AS total
FROM cte ;
要么:
; WITH cte AS
( SELECT COUNT(DISTINCT model) AS cnt
FROM VehicleModelYear
GROUP BY make
)
SELECT SUM(cnt) AS total
FROM cte ;
要么:
; WITH cte AS
( SELECT NULL AS n
FROM VehicleModelYear
GROUP BY make, model
)
SELECT COUNT(*) AS total
FROM cte ;
最后,修改了上面的第二個和第三個查詢,沒有子查詢:
SELECT DISTINCT
SUM(COUNT(DISTINCT model)) OVER () AS total
FROM VehicleModelYear
GROUP BY make ;
SELECT DISTINCT COUNT(*) OVER () AS total
FROM VehicleModelYear
GROUP BY make, model ;
SELECT TOP (1)
SUM(COUNT(DISTINCT model)) OVER () AS total
FROM VehicleModelYear
GROUP BY make ;
SELECT TOP (1) COUNT(*) OVER () AS total
FROM VehicleModelYear
GROUP BY make, model ;
要么:
; WITH cte AS
( SELECT DENSE_RANK() OVER(ORDER BY make, model) AS dr
FROM VehicleModelYear
)
SELECT MAX(dr) AS total
FROM cte ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.