56

オカレンス番号で個別のキーを選択したいのですが、このクエリは機能しているようです。

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

4 に答える 4

106

集計の HAVING 句

SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*) 
FROM ItemMetaData 
Group By ItemMetaData.KEY, ItemMetaData.VALUE
HAVING count(*) > 2500
ORDER BY count(*) desc;
于 2012-07-09T15:04:24.673 に答える
15

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

select ..., count(*) from ... group by ... having count(*) > 2500;
于 2012-07-09T15:04:29.993 に答える
8

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

SELECT
ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
GROUP BY ItemMetaData.KEY
HAVING count(*) > 2500
ORDER BY count(*) desc
于 2012-07-09T15:04:43.567 に答える
4

説明は次のとおりです。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;
于 2017-08-23T09:16:59.660 に答える