SQL COUNT * GROUP BY大于,

时间:2012-07-09 15:01:54

标签: sql count group-by

我想选择带有出现次数的不同键,这个查询似乎是有效的:

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

但我也希望过滤这些结果,这意味着我只想在count(*)大于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;

不幸的是,此查询会导致语法错误。你能帮我实现我的要求吗?

4 个答案:

答案 0 :(得分:65)

聚合的HAVING子句

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

答案 1 :(得分:9)

您应该将having用于群组功能,而不是where。 E.g:

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

答案 2 :(得分:7)

您不需要使用子查询 - 只需使用having clause而不是where子句按聚合列进行过滤。

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

答案 3 :(得分:0)

以下是解释:WHERE子句引入了各行的条件; HAVING子句引入了聚合条件。

WHERE之前使用GROUP BY,在HAVING之后使用GROUP BY。它不是强制性的,但在大多数情况下都是有用的。

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