2012-11-26 84 views
0

的MAX有一個查詢,顯示該...SQL只顯示我的COUNT()列

salesPersonId Total 
------------- ----------- 
AB4   3 
GT10   2 
JB9   1 
JS1   2 
KT8   4 
TC3   4 
VG7   2 
WC2   7 

(8 row(s) affected) 

我查詢...

SELECT so.salesPersonId, COUNT(so.orderId) AS 'Total' 
FROM salesOrder AS so 

GROUP BY so.salesPersonId 
GO 

我想做到這一點...

SELECT so.salesPersonId, COUNT(so.orderId) AS 'Total' 
FROM salesOrder AS so 
WHERE MAX(COUNT(so.orderId)) 
GROUP BY so.salesPersonId 
GO 

這給了我一個錯誤,關於如何只顯示總數最高的salesPersonId的任何想法?這裏是WC2。

回答

1

可以使用common table expression(或子查詢)來獲得擊穿,然後選擇您的CTE的所有條目,他們的總數等於最大總(因爲可能不止一個):

;WITH TotalOrders 
AS 
    (
    SELECT so.salesPersonId, COUNT(so.orderId) AS 'Total' 
    FROM salesOrder AS so 
    GROUP BY so.salesPersonId 
    ) 
SELECT * 
FROM TotalOrders [TO] 
WHERE [TO].Total = (SELECT MAX([TO].Total) FROM TotalOrders [TO]) 
+0

偉大工程中,WITH AS TotalOrders是新的我。那是一種快捷方式嗎? – DDDD

+0

@DDDD - 它是['common table expression'](http://msdn.microsoft.com/zh-cn/library/ms175972.aspx) - 將其視爲子查詢(或臨時視圖)和您超過60%(CTE可以做一些在子查詢中很難做到的事情)。 –

+0

謝謝,我會進一步檢查這些CTE。 :) – DDDD

1
WITH totalCount 
AS 
(
    SELECT so.salesPersonId, COUNT(so.orderId) AS 'Total' 
    FROM salesOrder AS so 
    GROUP BY so.salesPersonId 
), 
maxCount AS 
(
    SELECT salesPersonId, Total, 
      DENSE_RANK() OVER (ORDER BY Total DESC) rn 
    FROM totalCount 
) 
SELECT salesPersonId, Total 
FROM maxCount 
WHERE rn = 1 
+0

的DENSE_RANK給我一個錯誤說它恰恰0參數 – DDDD

+0

嘗試'DENSE_RANK()OVER(ORDER BY總計DESC)rn' –