SQL COUNT*GROUP BY大于,

czu*_*upe 36 sql group-by count

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

SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
FROM ItemMetaData 
GROUP BY ItemMetaData.KEY 
ORDER BY count(*) desc;
Run Code Online (Sandbox Code Playgroud)

但我也希望过滤这些结果,这意味着我只想在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;
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*ill 73

聚合的HAVING子句

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


And*_*nov 9

您应该使用having组函数而不是where.例如:

select ..., count(*) from ... group by ... having count(*) > 2500;
Run Code Online (Sandbox Code Playgroud)


das*_*ght 7

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

SELECT
ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
GROUP BY ItemMetaData.KEY
HAVING count(*) > 2500
ORDER BY count(*) desc
Run Code Online (Sandbox Code Playgroud)


Ale*_*nau 5

解释如下:WHERE子句引入了单个行的条件;HAVING子句引入了聚合条件。

\n\n

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

\n\n
SELECT \n       ItemMetaData.KEY, ItemMetaData.VALUE, \xd0\xa1OUNT(*) \nFROM  ItemMetaData \nGROUP BY\n       ItemMetaData.KEY, ItemMetaData.VALUE\nHAVING \xd0\xa1OUNT(*) > 2500\nORDER BY \xd0\xa1OUNT(*) DESC;\n
Run Code Online (Sandbox Code Playgroud)\n