Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
In sommige gevallen wilt u mogelijk afzonderlijke rijen uitsluiten van groepen (met behulp van een WHERE-component) voordat u een voorwaarde toepast op groepen als geheel (met behulp van een HAVING-component).
Een HAVING-component is vergelijkbaar met een WHERE-component, maar is alleen van toepassing op groepen als geheel (dat wil gezegd, op de rijen in de resultatenset die groepen vertegenwoordigen), terwijl de WHERE component van toepassing is op afzonderlijke rijen. Een query kan zowel een WHERE-component als een HAVING-component bevatten. In dat geval:
De
WHEREclausule wordt eerst toegepast op de afzonderlijke rijen in de tabellen of tabelwaardeobjecten in het deelvenster Diagram. Alleen de rijen die voldoen aan de voorwaarden in deWHERE-component worden gegroepeerd.De
HAVINGcomponent wordt vervolgens toegepast op de rijen in de resultatenset. Alleen de groepen die voldoen aan deHAVINGvoorwaarden worden weergegeven in de queryuitvoer. U kunt eenHAVINGcomponent alleen toepassen op kolommen die ook worden weergegeven in deGROUP BYcomponent of in een statistische functie.
Een WHERE- en HAVING-component opgeven voor twee gekoppelde tabellen
Notitie
De database die in dit artikel wordt gebruikt, is de pubs database, beschikbaar vanuit de Northwind en pubs voorbeeldgegevensbanken voor Microsoft SQL Server op GitHub.
Stel dat u deelneemt aan de titles en publishers tabellen om een query te maken met de gemiddelde boekprijs voor een set uitgevers. U wilt de gemiddelde prijs voor slechts een specifieke set uitgevers zien, misschien alleen de uitgevers in de staat Californië. En zelfs dan wilt u alleen de gemiddelde prijs zien als deze meer dan $ 10,00 is.
U kunt de eerste voorwaarde vaststellen door een WHERE component op te nemen, waarmee uitgevers die zich niet in Californië bevinden, worden verwijderd voordat u de gemiddelde prijzen berekent. Voor de tweede voorwaarde is een HAVING-component vereist, omdat de voorwaarde is gebaseerd op de resultaten van het groeperen en samenvatten van de gegevens. De resulterende SQL-instructie kan er als volgt uitzien:
SELECT titles.pub_id,
AVG(titles.price)
FROM titles
INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING AVG(price) > 10;
In de Visual Database Tools van SQL Server Management Studio kunt u zowel HAVING- als WHERE-componenten maken in het deelvenster Criteria. Als u standaard een zoekvoorwaarde voor een kolom opgeeft, wordt de voorwaarde onderdeel van de HAVING component. U kunt de voorwaarde echter wijzigen in een WHERE-clausule.
U kunt een WHERE-component en HAVING-component met dezelfde kolom maken. Hiervoor moet u de kolom twee keer toevoegen aan het deelvenster Criteria en vervolgens één exemplaar opgeven als onderdeel van de HAVING-component en het andere exemplaar als onderdeel van de WHERE-component.
Een WHERE-voorwaarde opgeven in een statistische query
Geef de groepen voor uw query op. Voor meer informatie, zie Rijen groeperen in queryresultaten (Hulpmiddelen voor visuele databases).
Als deze zich nog niet in het deelvenster Criteria bevindt, voegt u de kolom toe waarop u de
WHEREvoorwaarde wilt baseren.Wis de uitvoerkolom, tenzij de datakolom deel uitmaakt van de
GROUP BYclausule of deel uitmaakt van een aggregatiefunctie.Geef in de kolom Filter de voorwaarde
WHEREop. De query- en weergaveontwerper voegt de voorwaarde toe aan deHAVING-component van de SQL-instructie.Notitie
De query die in het voorbeeld voor deze procedure wordt weergegeven, voegt twee tabellen,
titlesenpublishers.Op dit punt in de query bevat de SQL-instructie een
HAVING-component:SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id GROUP BY titles.pub_id HAVING publishers.state = 'CA';Selecteer in de kolom Groeperen op de optie Where uit de lijst met groeps- en samenvattingsopties. De query- en weergaveontwerper verwijdert de voorwaarde uit de
HAVING-component in de SQL-instructie en voegt deze toe aan deWHERE-component.De SQL-instructie wordt gewijzigd om in plaats daarvan een
WHERE-clausule op te nemen:SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id WHERE publishers.state = 'CA' GROUP BY titles.pub_id;