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)
您应该使用having组函数而不是where.例如:
select ..., count(*) from ... group by ... having count(*) > 2500;
Run Code Online (Sandbox Code Playgroud)
您不需要使用子查询 - 只需使用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)
解释如下:WHERE子句引入了单个行的条件;HAVING子句引入了聚合条件。
WHERE之前GROUP BY和HAVING之后使用GROUP BY。它不是强制性的,但在大多数情况下很有帮助。
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;\nRun Code Online (Sandbox Code Playgroud)\n