web-dev-qa-db-fra.com

Plusieurs fonctions d'agrégation dans la clause HAVING

En raison de la nature de ma requête, j'ai des enregistrements avec un nombre de 3 qui correspondent également aux critères d'avoir un nombre de 2 et ainsi de suite. Je me demandais s'il était possible d'interroger 'ayant plus de x et moins de 7'? Comment pourrais-je écrire cela. Voici mon code actuel.

GROUP BY meetingID
HAVING COUNT( caseID )<4

Je voudrais quelque chose comme

GROUP BY meetingID
HAVING COUNT( caseID )<4 AND >2

De cette façon, cela ne compterait que pour exactement 3

26
blarg
GROUP BY meetingID
HAVING COUNT(caseID) < 4 AND COUNT(caseID) > 2
59
Trent Earl

Il n'est pas nécessaire de faire deux vérifications, pourquoi ne pas simplement vérifier le nombre = 3:

GROUP BY meetingID
HAVING COUNT(caseID) = 3

Si vous souhaitez utiliser les contrôles multiples, vous pouvez utiliser:

GROUP BY meetingID
HAVING COUNT(caseID) > 2
 AND COUNT(caseID) < 4
8
Taryn

Pour votre exemple de requête, la seule valeur possible supérieure à 2 et inférieure à 4 est 3, nous simplifions donc:

GROUP BY meetingID
HAVING COUNT(caseID) = 3

Dans votre cas général:

GROUP BY meetingID
HAVING COUNT(caseID) > x AND COUNT(caseID) < 7

Ou (peut-être plus facile à lire?),

GROUP BY meetingID
HAVING COUNT(caseID) BETWEEN x+1 AND 6
3
lc.

Ici, j'écris une requête complète qui effacera tous vos doutes

SELECT BillingDate,
       COUNT(*) AS BillingQty,
       SUM(BillingTotal) AS BillingSum
FROM Billings
WHERE BillingDate BETWEEN '2002-05-01' AND '2002-05-31'
GROUP BY BillingDate
HAVING COUNT(*) > 1
AND SUM(BillingTotal) > 100
ORDER BY BillingDate DESC
1
Mukesh Kumar

Quelque chose comme ça?

HAVING COUNT(caseID) > 2
AND COUNT(caseID) < 4
1
Achrome