SQLShack (Nederlands)

In dit artikel wordt de SQL Count Distinct-operator onderzocht om de dubbele rijen in de resultatenset.

Een ontwikkelaar moet gegevens ophalen uit een SQL-tabel met meerdere voorwaarden. Soms willen we alle rijen in een tabel krijgen, maar de beschikbare NULL-waarden elimineren. Stel dat we verschillende klantrecords willen krijgen die vorig jaar een bestelling hebben geplaatst.

Laten we doorgaan en een snel overzicht hebben van de SQL Count-functie.

SQL Count-functie

We gebruiken de SQL Count-aggregatiefunctie om het aantal rijen in het resultaat. Stel dat we een producttabel hebben met records voor alle producten die door een bedrijf worden verkocht. We willen weten hoeveel producten er in het afgelopen kwartaal zijn verkocht. We kunnen SQL Count Function gebruiken om het aantal rijen in de opgegeven conditie te retourneren.

De syntaxis van de SQL COUNT-functie:
COUNT (expressie);

Standaard, SQL Server Count-functie gebruikt het trefwoord All. Dit betekent dat SQL Server alle records in een tabel telt. Het bevat ook de rijen met dubbele waarden.

Laten we een voorbeeldtabel maken en er enkele records in invoegen.

In deze tabel hebben we ook dubbele waarden en NULL-waarden .

In de volgende schermafbeelding kunnen we opmerken dat:

  • Count (* ) bevat zowel dubbele waarden als NULL-waarden
  • Count (Col1) bevat dubbele waarden maar bevat geen NULL-waarden

Stel dat we de verschillende waarden willen weten die beschikbaar zijn in de tabel. We kunnen SQL COUNT DISTINCT gebruiken om dit te doen.

1
2

Selecteer aantal (DISTINCT COL1)
van ## TestTable

In de volgende uitvoer krijgen we slechts 2 rijen. SQL COUNT Distinct elimineert geen dubbele en NULL-waarden uit de resultatenset.

Laten we eens kijken naar een ander voorbeeld. In dit voorbeeld hebben we een locatietabel die bestaat uit twee kolommen Stad en Staat.

Voer nu de volgende zoekopdracht uit om een telling van de afzonderlijke stad uit de tabel te achterhalen.

1
2

SELECTEER AANTAL (DISTINCT (Stad))
VAN Locatie;

Het retourneert het aantal unieke steden 2 (Gurgaon en Jaipur) uit onze resultatenset.

Als we naar de gegevens kijken, hebben we een vergelijkbare plaatsnaam in een andere staat ook. De combinatie van stad en staat is uniek en we willen niet dat die unieke combinatie uit de uitvoer wordt verwijderd.

We kunnen de SQL-functie DISTINCT ook gebruiken voor een combinatie van kolommen. Het controleert op de combinatie van waarden en verwijdert als de combinatie niet uniek is.

1
2

SELECTEER DISTINCT Stad, Staat
VAN Locatie;

Het verwijdert de dubbele stadsnamen niet uit de uitvoer vanwege een unieke combinatie van waarden.

Laten we nog een rijen invoegen in de locatietabel.

1

Invoegen in locatiewaarden (“Gurgaon “,” Haryana “)

We hebben 5 records in de locatietafel. In de gegevens kun je zien dat we één combinatie van stad en staat hebben die niet uniek is.

Voer de SELECT DISTINCT opnieuw uit functie, en het zou deze keer slechts 4 rijen moeten retourneren.

We kunnen de SQL COUNT DISTINCT-functie niet rechtstreeks gebruiken met de meerdere kolommen . U krijgt de volgende foutmelding.

We kunnen een tijdelijke tabel gebruiken om records uit de SQL DISTINCT-functie op te halen en deze vervolgens gebruiken count (*) om het aantal rijen te controleren.

1
2
3
4

SELECTEER DISTINCT Stad, Staat
in #Temp
VAN Locatie;
Selecteer aantal (*) uit #Temp

We krijgen het aantal rijen 4 in de uitvoer.

Als we een combinatie van kolommen gebruiken om waarden en een van de kolommen bevat NULL-waarden, het wordt ook een unieke combinatie voor de SQL Server.

Laten we om dit te verifiëren meer records in de locatietabel invoegen. We hebben geen staat gespecificeerd in deze zoekopdracht.

1
2

Invoegen in locatiewaarden (“Gurgaon”, “”)
Invoegen in locatie (stad) waarden (“Gurgaon”)

Laten we eens kijken naar de locatietabelgegevens.

Voer de zoekopdracht opnieuw uit om onderscheid te maken rijen uit de locatietabel.

1
2

SELECTEER aparte stad, staat
VAN locatie;

In de uitvoer kunnen we zien dat het niet elimineert de combinatie van Stad en Staat met de blanco of NULL-waarden.

Evenzo kunt u het aantal rijen 6 zien met SQL COUNT DISTINCT-functie.

Verschil tussen SELECT COUNT, COUNT (*) en SQL COUNT onderscheiden

COUNT

Aantal (*)

Count (Distinct)

Het retourneert het totale aantal rijen nadat is voldaan aan de voorwaarden die zijn gespecificeerd in de where-clausule.

Het retourneert het totale aantal rijen nadat is voldaan aan de voorwaarden die zijn gespecificeerd in de where-clausule.

Het retourneert het unieke aantal rijen nadat is voldaan aan de voorwaarden die zijn gespecificeerd in de where-clausule. .

Het geeft het aantal rijen weer. Het elimineert geen dubbele waarden.

Het beschouwt alle rijen, ongeacht eventuele dubbele, NULL-waarden.

Het geeft een duidelijk aantal rijen na eliminatie van NULL en dubbele waarden.

Het elimineert de NULL-waarden in de uitvoer.

Het elimineert de NULL-waarden in de uitvoer niet.

Het elimineert de NULL-waarden in de uitvoer.

Uitvoeringsplan van SQL Count distinct-functie

Laten we eens kijken naar het feitelijke uitvoeringsplan van de SQL COUNT DISTINCT-functie. U moet het feitelijke uitvoeringsplan inschakelen via de SSMS-menubalk, zoals hieronder weergegeven.

Voer de zoekopdracht uit om een werkelijke uitvoeringsplan. In dit uitvoeringsplan kunt u operators zien die de meeste resources verbruiken:

  • Sorteren (onderscheiden sorteren) – kosten 78%
  • tabelscan – kosten 22%

Je kunt de muis over de sorteeroperator bewegen, en het opent een tool-tip met de details van de operator.

In de eigenschappenvensters krijgen we ook meer details over de sorteeroperator inclusief geheugentoewijzing, statistieken en het aantal rijen.

In een tabel met miljoen records kan SQL Count Distinct prestatieproblemen veroorzaken omdat een aparte count-operator een dure operator is in de feitelijk uitvoeringsplan.

SQL Server 2019 verbetert de prestaties van de SQL COUNT DISTINCT-operator met behulp van een nieuwe Ca_count_distinct-functie. Deze nieuwe functie van SQL Server 2019 biedt een geschatte afzonderlijke telling van de rijen. Er kan een klein verschil zijn in de uitvoer van de functie SQL Count distinct en Ca.Count_distinct.

U kunt SQL COUNT DISTINCT vervangen door het sleutelwoord Ca._Count_distinct om deze functie van SQL Server 2019 te gebruiken.

1
2

SELECTEER APPROX_COUNT_DISTINCT (stad)
VAN locatie;

U kunt meer over deze functie ontdekken in de nieuwe SQL Server 2019-functie Ca_Count_Distinct.

Conclusie

In dit artikel hebben we de SQL COUNT-functie onderzocht met verschillende voorbeelden. We hebben ook de nieuwe SQL-functie Ca.Count_distinct behandeld die beschikbaar is vanaf SQL Server 2019. Ik zou willen voorstellen om ze te herzien volgens uw omgeving. Als u opmerkingen of vragen heeft, kunt u deze achterlaten in de onderstaande opmerkingen.

  • Auteur
  • Recente berichten
Als MCSA-gecertificeerde en Microsoft-gecertificeerde trainer in Gurgaon, India, met 13 jaar ervaring, werkt Rajendra voor een verscheidenheid aan grote bedrijven die zich richten op prestatieoptimalisatie, monitoring, hoge beschikbaarheid , en strategieën en implementatie voor noodherstel. Hij is de auteur van honderden gezaghebbende artikelen over SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git en aanverwante technologieën die tot nu toe door meer dan 10 miljoen lezers zijn bekeken.
Hij is de maker van een van de grootste gratis online verzamelingen artikelen over één onderwerp, met zijn 50-delige serie over SQL Server Always On Availability Groups. Op basis van zijn bijdrage aan de SQL Server-gemeenschap, is hij bekroond met verschillende prijzen, waaronder de prestigieuze “Beste auteur van het jaar”, continu in 2020 en 2021 bij SQLShack.
Raj is altijd geïnteresseerd in nieuwe uitdagingen, dus als je advies nodig hebt hulp bij elk onderwerp dat in zijn geschriften aan bod komt, hij is te bereiken op [email protected]
Bekijk alle berichten van Rajendra Gupta

Laatste berichten van Rajendra Gupta (bekijk alle)
  • Sessietime-outs in SQL Server altijd beschikbaar Groepen – 8 februari 2021
  • Kleine en grote versie-upgrades voor AWS RDS SQL Server uitvoeren – 29 januari 2021
  • AWS RDS PostgreSQL-instanties implementeren – 27 januari 2021

Write a Comment

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