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:

SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
Code language: SQL (Structured Query Language) (sql)

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 FROMWHERESELECT en GROUP BY clausules en vóór ORDER BY, en LIMIT clausules.

Merk op dat de SQL-standaard specificeert dat de 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:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
Code language: SQL (Structured Query Language) (sql)

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:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
Code language: SQL (Structured Query Language) (sql)

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:

SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
Code language: SQL (Structured Query Language) (sql)

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:

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;
Code language: SQL (Structured Query Language) (sql)

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *