Je veux sélectionner les clés distinctes avec le numéro d'occurrence, cette requête semble fonctionner:
SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
GROUP BY ItemMetaData.KEY
ORDER BY count(*) desc;
Mais je veux également filtrer ces résultats, ce qui signifie que je ne veux que lorsque le nombre (*) est supérieur à 2500, donc seule une occurrence supérieure à 2500 sera affichée, mais:
SELECT *
FROM
(
SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
GROUP BY ItemMetaData.KEY
ORDER BY count(*) desc
) as result WHERE count(*)>2500;
Malheureusement, cette requête entraîne une erreur de syntaxe. Pouvez-vous m'aider à atteindre mon exigence?
Clause HAVING pour les agrégats
SELECT ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
Group By ItemMetaData.KEY, ItemMetaData.VALUE
HAVING count(*) > 2500
ORDER BY count(*) desc;
Vous devez utiliser having
avec des fonctions de groupe au lieu de where
. Par exemple.:
select ..., count(*) from ... group by ... having count(*) > 2500;
Vous n'avez pas besoin d'utiliser une sous-requête - utilisez simplement une clause having
au lieu de la clause where
pour filtrer par une colonne agrégée.
SELECT
ItemMetaData.KEY, ItemMetaData.VALUE, count(*)
FROM ItemMetaData
GROUP BY ItemMetaData.KEY
HAVING count(*) > 2500
ORDER BY count(*) desc
Voici l'explication: la clause WHERE
introduit une condition sur les lignes individuelles; La clause HAVING
introduit une condition sur les agrégations.
Utilisez WHERE
avant GROUP BY
et HAVING
après GROUP BY
. Ce n'est pas obligatoire, mais utile dans la plupart des cas.
SELECT
ItemMetaData.KEY, ItemMetaData.VALUE, СOUNT(*)
FROM ItemMetaData
GROUP BY
ItemMetaData.KEY, ItemMetaData.VALUE
HAVING СOUNT(*) > 2500
ORDER BY СOUNT(*) DESC;