2012-07-09 110 views
27

我要選擇具有的發生數量的區別鍵,這個查詢好像functionate:SQL COUNT * GROUP BY大於,

SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
FROM ItemMetaData 
GROUP BY ItemMetaData.KEY 
ORDER BY count(*) desc; 

但我也想過濾這些結果,這意味着我只在計數希望(*)大於2500,因此只顯示大於2500的事件,但是:

SELECT * 
FROM 
(
    SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
    FROM ItemMetaData 
    GROUP BY ItemMetaData.KEY 
    ORDER BY count(*) desc 
) as result WHERE count(*)>2500; 

不幸的是,此查詢導致語法錯誤。你能幫我實現我的要求嗎?

+0

有人剛刪除我想接受這個職位,請寫回,我會接受它「SELECT * FROM ( SELECT ItemMetaData.KEY,ItemMetaData.VALUE,COUNT(*) 'ItemsCount' FROM ItemMetaData GROUP BY ItemMetaData.KEY )sub WHERE sub.ItemsCount> 2500 ORDER BY sub.ItemsCount desc;「 有工作也自然所有其他答案會投票,謝謝,但... – czupe 2012-07-09 15:08:27

回答

52

HAVING子句對聚集

SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
FROM ItemMetaData 
Group By ItemMetaData.KEY, ItemMetaData.VALUE 
HAVING count(*) > 2500 
ORDER BY count(*) desc; 
8

你應該使用having與組的功能,而不是where。例如: -

select ..., count(*) from ... group by ... having count(*) > 2500; 
6

您不需要使用子查詢 - 只需使用的having clause代替where條款通過聚合列進行篩選。

SELECT 
ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
FROM ItemMetaData 
GROUP BY ItemMetaData.KEY 
HAVING count(*) > 2500 
ORDER BY count(*) desc 
0

以下是解釋:WHERE子句在單個行上引入條件; HAVING子句引入了聚合條件。

使用WHERE之前GROUP BYHAVING之後GROUP BY。這不是強制性的,但在大多數情況下是有幫助的。

SELECT 
     ItemMetaData.KEY, ItemMetaData.VALUE, СOUNT(*) 
FROM ItemMetaData 
GROUP BY 
     ItemMetaData.KEY, ItemMetaData.VALUE 
HAVING СOUNT(*) > 2500 
ORDER BY СOUNT(*) DESC;