Å ha (SQL) - Having (SQL)

En HAVINGklausul i SQL spesifiserer at en SQL- SELECTsetning bare må returnere rader der samlede verdier oppfyller de angitte betingelsene .

HAVINGog WHEREblir ofte forvirret av nybegynnere, men de tjener forskjellige formål. WHEREblir tatt i betraktning på et tidligere stadium av en spørringskjøring, filtrerer radene som er lest fra tabellene. Hvis et spørsmål inneholder GROUP BY, er rader fra tabellene gruppert og samlet. Etter at aggregeringen HAVINGer brukt, filtreres radene ut som ikke samsvarer med de spesifiserte forholdene. Derfor WHEREgjelder for data som leses fra tabeller, og HAVINGkun skal gjelde aggregerte data, som er ikke kjent i den innledende fasen av en spørring.

For å se den nåværende tilstanden som er dannet av GROUP BYklausulen, brukes HAVINGklausulen.

Eksempler

Slik returnerer du en liste over avdelings-ID-er der det totale salget overstiger $ 1000 på datoen 1. januar 2000, sammen med summen av deres salg på den datoen:

SELECT DeptID, SUM(SaleAmount)
FROM Sales
WHERE SaleDate = '01-Jan-2000'
GROUP BY DeptID
HAVING SUM(SaleAmount) > 1000

Med henvisning til eksempeltabellene i Bli med- eksemplet , vil følgende spørsmål returnere listen over avdelinger som har mer enn 1 ansatt:

SELECT DepartmentName, COUNT(*) 
FROM Employee
JOIN Department ON Employee.DepartmentID = Department.DepartmentID 
GROUP BY DepartmentName
HAVING COUNT(*)>1;

HAVINGer praktisk, men ikke nødvendig. Kode som tilsvarer eksemplet ovenfor, men uten å bruke HAVING, kan se ut som:

SELECT * FROM (
   SELECT DepartmentName AS deptNam, COUNT(*) AS empCnt
   FROM Employee AS emp
   JOIN Department AS dept ON emp.DepartmentID = dept.DepartmentID
   GROUP BY deptNam
) AS grp
WHERE grp.empCnt > 1;

Eksterne linker