Samenvatting: in deze tutorial leert u hoe u MySQL HAVING
-clausule kunt gebruiken om een filtervoorwaarde op te geven voor groepen rijen of aggregaten.
Inleiding tot de MySQL HAVING-clausule
De HAVING
-clausule wordt gebruikt in het SELECT
statement om filtervoorwaarden op te geven voor een groep rijen of aggregaten.
De HAVING
-clausule wordt vaak gebruikt met de GROUP BY
-clausule om groepen te filteren op basis van een gespecificeerde voorwaarde. Als de GROUP BY
-clausule wordt weggelaten, gedraagt de HAVING
-clausule zich als de WHERE
-clausule.
Het volgende illustreert de syntaxis van de HAVING
-clausule:
Code language: SQL (Structured Query Language) (sql)SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
In deze syntaxis specificeert u een voorwaarde in de HAVING
-clausule. Als een rij, die wordt gegenereerd door de group by-clausule, ervoor zorgt dat de group_condition
waar is, wordt deze in de query opgenomen in de resultatenverzameling.
Myryp>merk op dat de HAVING
-clausule een filtervoorwaarde toepast op elke groep rijen, terwijl de WHERE
-clausule de filtervoorwaarde toepast op elke individuele rij.
MySQL evalueert de HAVING
-clausule na de FROM
WHERE
SELECT
en GROUP BY
clausules en vóór ORDER BY
, en LIMIT
clausules.
HAVING
wordt geëvalueerd vóór de SELECT
-clausule en na de GROUP BY
-clausule.MySQL HAVING-clausule voorbeelden
Laten we een paar voorbeelden nemen van het gebruik van de HAVING
-clausule om te zien hoe het werkt. We gebruiken de orderdetails
tabel in de voorbeelddatabase voor de demonstratie.
Het volgende gebruikt de GROUP BY
clausule om ordernummers te krijgen, het aantal verkochte artikelen per bestelling, en de totale verkoop voor elk uit de orderdetails
tabel:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Probeer het uit
Nu, kunt u vinden welke order een totale verkoop heeft die groter is dan 1000
door de HAVING
-clausule als volgt te gebruiken:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
Probeer het eens
Je kunt een complexe voorwaarde in de HAVING
-clausule met logische operatoren zoals OR
en AND
.
Het volgende voorbeeld gebruikt de HAVING
clausule om orders te vinden die totaalbedragen groter dan 1000
hebben en meer dan 600
items bevatten:
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
Probeer het eens
Voorstel dat u alle bestellingen wilt vinden die de status “verzonden” hebben en waarvan het totaalbedrag hoger is dan 1500, dan kunt u de orderdetails
tabel samenvoegen met de orders
tabel met behulp van de INNER JOIN
clausule en een voorwaarde toepassen op status
kolom en total
aggregaat zoals in de volgende query wordt getoond:
Code language: SQL (Structured Query Language) (sql)SELECT a.ordernumber, status, SUM(priceeach*quantityOrdered) totalFROM orderdetails aINNER JOIN orders b ON b.ordernumber = a.ordernumberGROUP BY ordernumber, statusHAVING status = 'Shipped' AND total > 1500;
Probeer het uit
De HAVING
-clausule is alleen nuttig wanneer u deze gebruikt met de GROUP BY
-clausule om de uitvoer te genereren van de rapporten opniveau rapporten te genereren. U kunt bijvoorbeeld de HAVING
clausule gebruiken om vragen te beantwoorden als het vinden van het aantal orders deze maand, dit kwartaal, of dit jaar die een totale omzet hebben van meer dan 10K.
In deze tutorial hebt u geleerd hoe u de MySQL HAVING
-clausule met de GROUP BY
-clausule kunt gebruiken om filtervoorwaarden op te geven voor groepen rijen of aggregaten.
- Was deze tutorial nuttig?
- JaNee