我想选择带有出现次数的不同键,这个查询似乎是有效的:
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;
不幸的是,此查询会导致语法错误。你能帮我实现我的要求吗?
答案 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;