web-dev-qa-db-ja.com

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;

残念ながら、このクエリは構文エラーになります。要件の達成を手伝ってもらえますか?

34
czupe

集計のHAVING句

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

havingの代わりに、グループ関数でwhereを使用する必要があります。例えば。:

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

サブクエリを使用する必要はありません-having句の代わりに where を使用して、集計列でフィルタリングします。

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

説明は次のとおりです。WHERE句は、個々の行に条件を導入します。 HAVING句は、集計に条件を導入します。

GROUP BYの前にWHEREを使用し、GROUP BYの後にHAVINGを使用します。これは必須ではありませんが、ほとんどの場合に役立ちます。

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