簡體   English   中英

多列上的SELECT COUNT(DISTINCT ...)錯誤?

[英]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)

您可以擁有一個子查詢,該子查詢返回您可以計算的唯一一組makemodel

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 ;

@Alexander Fedorenko的后期補充:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM