我有以下查詢:SQL服務器HAVING COUNT OVER問題
SELECT DISTINCT
x.CountryID [code],
c.Description [name],
COUNT(x.username) OVER(PARTITION BY x.countryID) [count],
COUNT(x.username) OVER() [tcount],
COALESCE(c.Map,'world') [map]
FROM
(
SELECT DISTINCT
CountryID,
username,
Score
FROM global.dbo.UserCategories
WHERE TLCID LIKE @TLCID OR TLCID IN (@TLCID)
) x
JOIN global.dbo.countrydetails c on x.CountryID=c.country
AND x.Score BETWEEN @ScoreMin AND @ScoreMax
GROUP BY x.CountryID, c.Description, c.Map, x.username --WITH ROLLUP
--HAVING COUNT(x.username) OVER(PARTITION BY x.countryID)>@Min
ORDER BY [name] ASC
,顯示了每個國家有某些類別 了一定的成績和活躍用戶的數量,我想從列表中國家排除有幾個用戶 ,我想補充HAVING子句 但SQL告訴我
「窗函數只能出現在SELECT或ORDER BY子句 。」
最重要的表是CountryDetails看起來像這樣:有關結果
CountryID username score TLCID
DE 12-bu 19598 131090
DE 12-bu 19598 220
DE 12-bu 19598 11700
DE 12-bu 19598 131090
DE 1buy3 19648 11700
DE 1buy3 19648 11450
DE 1buy3 19648 11700
DE 1buy3 19648 11700
CN 2012f 22780 11450
CN 2012f 22780 11450
CN 2012f 22780 11450
CN 2012f 22780 11450
CN 2012f 22780 11450
GB agood 74539 1
GB agood 74539 11450
GB agood 74539 12576
GB agood 74539 131090
GB agood 74539 1
GB agood 74539 11233
GB agood 74539 1
GB agood 74539 1
GB agood 74539 1
GB agood 74539 220
BG best0 3173 2984
IT bestb 13777 15032
IT bestb 13777 293
IT bestb 13777 293
IT bestb 13777 15032
IT bestb 13777 15032
IT bestb 13777 15032
IT bestb 13777 58058
IT bestb 13777 293
DE bestb 55165 131090
DE bestb 55165 293
DE bestb 55165 293
DE bestb 55165 293
DE bestb 55165 293
CN besto 24537 11450
GB bidan 4584 58058
GB bidan 4584 58058
IT bimbu 4145 11700
GB buy_d 97093 12576
GB buy_d 97093 888
GB buy_d 97093 888
GB buy_d 97093 888
GB buy_d 97093 159912
GB buy_d 97093 888
GB buy_d 97093 159912
GB buy_d 97093 11700
GB buy_d 97093 11700
GB buy_d 97093 159912
GB buy_d 97093 20710
GB buy_d 97093 159912
GB buy_d 97093 888
GB buy_s 988538 11232
GB buy_s 988538 1
GB buy_s 988538 11700
GB buy_s 988538 26395
..現在我得到這個
code name count tcount map
AD Andorra 3 83141 andorra
AU Australia 14 83141 australia
AT Austria 345 83141 austria
.....
BE Belgium 28 83141 belgium
CN China 1070 83141 china
FR France 4732 83141 france
DE Germany 33782 83141 germany
HK Hong Kong 364 83141 hongKong
HU Hungary 9 83141 hungary
.....
IN India 10 83141 india
IR Iran 1 83141 iran
IQ Iraq 17 83141 iraq
IE Ireland 36 83141 ireland
IL Israel 16 83141 israel
IT Italy 5427 83141 italy
JE Jersey 25 83141 world
....
GB United Kingdom 35136 83141 unitedKingdom
....
假設設置@Min到20我想得到這個:
code name count tcount map
AT Austria 345 80945 austria
BE Belgium 28 80945 belgium
CN China 1070 80945 china
FR France 4732 80945 france
DE Germany 33782 80945 germany
HK Hong Kong 364 80945 hongKong
IE Ireland 36 80945 ireland
IT Italy 5427 80945 italy
JE Jersey 25 80945 world
GB United Kingdom 35136 80945 unitedKingdom
其中,tcount是計數的總和
是否可以建議解決方法的路徑?
謝謝!
您是否嘗試過'HAVING [統計]> @ Min'?不知道,但現在不能自己嘗試。 –
是的,嘗試過,但(我想)因爲[count]是查詢內的計算字段不能用作參數 – Joe
因爲'x.CountryId'出現在GROUP BY中,所以您不需要通過此進行分區。 HAVING與團隊的工作水平相同。在這種情況下,它將統計「CountryId,描述,地圖,用戶名」的唯一組合中的記錄數。 –