SQLShack (Deutsch)

In diesem Artikel wird der SQL Count Distinct-Operator zum Eliminieren erläutert die doppelten Zeilen in der Ergebnismenge.

Ein Entwickler muss Daten aus einer SQL-Tabelle mit mehreren Bedingungen abrufen. Manchmal möchten wir alle Zeilen in einer Tabelle abrufen, aber die verfügbaren NULL-Werte entfernen. Angenommen, wir möchten eindeutige Kundendatensätze erhalten, die im letzten Jahr eine Bestellung aufgegeben haben.

Lassen Sie uns einen kurzen Überblick über die SQL-Zählfunktion geben.

SQL-Zählfunktion

Wir verwenden die SQL-Zählaggregatfunktion, um die Anzahl der Zeilen zu ermitteln die Ausgabe. Angenommen, wir haben eine Produkttabelle, die Aufzeichnungen für alle von einem Unternehmen verkauften Produkte enthält. Wir möchten wissen, wie viele Produkte im letzten Quartal verkauft wurden. Wir können die SQL Count-Funktion verwenden, um die Anzahl der Zeilen in der angegebenen Bedingung zurückzugeben.

Die Syntax der SQL COUNT-Funktion:
COUNT (Ausdruck);

Standardmäßig: Die SQL Server-Zählfunktion verwendet das Schlüsselwort All. Dies bedeutet, dass SQL Server alle Datensätze in einer Tabelle zählt. Es enthält auch die Zeilen mit doppelten Werten.

Erstellen Sie eine Beispieltabelle und fügen Sie einige Datensätze ein.

In dieser Tabelle haben wir auch doppelte Werte und NULL-Werte

Im folgenden Screenshot können wir Folgendes feststellen:

  • Count (* ) enthält doppelte Werte sowie NULL-Werte
  • Count (Col1) enthält doppelte Werte, enthält jedoch keine NULL-Werte

Angenommen, wir möchten die in der Tabelle verfügbaren unterschiedlichen Werte kennen. Wir können dazu SQL COUNT DISTINCT verwenden.

1
2

Wählen Sie count (DISTINCT COL1)
aus ## TestTable

In der folgenden Ausgabe erhalten wir nur 2 Zeilen. SQL COUNT Distinct entfernt keine doppelten und NULL-Werte aus der Ergebnismenge.

Schauen wir uns ein anderes Beispiel an. In diesem Beispiel haben wir eine Standorttabelle, die aus zwei Spalten Stadt und Bundesland besteht.

Führen Sie nun die folgende Abfrage aus, um die Anzahl der verschiedenen Städte aus der Tabelle zu ermitteln.

1
2

COUNT AUSWÄHLEN (UNTERSCHEIDEN (Stadt))
FROM Location;

Gibt die Anzahl der eindeutigen Städte 2 (Gurgaon) zurück und Jaipur) aus unserer Ergebnismenge.

Wenn wir uns die Daten ansehen, haben wir einen ähnlichen Städtenamen in einem anderen Zustand auch. Die Kombination von Stadt und Bundesland ist eindeutig, und wir möchten nicht, dass diese eindeutige Kombination aus der Ausgabe entfernt wird.

Wir können die SQL DISTINCT-Funktion auch für eine Kombination von Spalten verwenden. Es prüft auf die Kombination von Werten und entfernt, wenn die Kombination nicht eindeutig ist.

1
2

SELECT DISTINCT Stadt, Bundesland
FROM Location;

Die doppelten Städtenamen werden nicht aus der Ausgabe entfernt aufgrund einer eindeutigen Kombination von Werten.

Fügen Sie noch eine Zeile in die Positionstabelle ein.

1

In Positionswerte einfügen („Gurgaon“ „,“ Haryana „)

Wir haben 5 Datensätze in die Standorttabelle. In den Daten sehen Sie, dass wir eine Kombination aus Stadt und Bundesland haben, die nicht eindeutig ist.

Führen Sie SELECT DISTINCT erneut aus Funktion, und diesmal sollten nur 4 Zeilen zurückgegeben werden.

Wir können die SQL COUNT DISTINCT-Funktion nicht direkt mit den mehreren Spalten verwenden . Sie erhalten die folgende Fehlermeldung:

Wir können eine temporäre Tabelle verwenden, um Datensätze von der SQL DISTINCT-Funktion abzurufen und dann zu verwenden count (*), um die Zeilenanzahl zu überprüfen.

1
2
3
4

SELECT DISTINCT Stadt, Bundesland
in #Temp
FROM Location;
Wählen Sie count (*) aus #Temp

Wir erhalten die Zeilenanzahl 4 in der Ausgabe.

Wenn wir eine Kombination von Spalten verwenden, um eine Unterscheidung zu erzielen Werte und jede der Spalten enthält NULL-Werte. Dies wird auch zu einer eindeutigen Kombination für den SQL Server.

Um dies zu überprüfen, fügen Sie weitere Datensätze in die Positionstabelle ein. In dieser Abfrage wurde kein Status angegeben.

1
2

In Standortwerte einfügen („Gurgaon“, „“)
In Standortwerte (Stadt) einfügen („Gurgaon“)

Schauen wir uns die Daten der Positionstabelle an.

Führen Sie die Abfrage erneut aus, um sie zu unterscheiden Zeilen aus der Positionstabelle.

1
2

SELECT verschiedene Stadt, Bundesland
FROM Location;

In der Ausgabe sehen wir, dass sie nicht eliminiert wird die Kombination von Stadt und Bundesland mit den leeren oder NULL-Werten.

In ähnlicher Weise können Sie mit SQL COUNT die Zeilenanzahl 6 anzeigen DISTINCT-Funktion.

Unterschied zwischen SELECT COUNT, COUNT (*) und SQL COUNT

COUNT

Anzahl (*)

Count (Distinct)

Gibt die Gesamtzahl der Zeilen zurück, nachdem die in der where-Klausel angegebenen Bedingungen erfüllt wurden.

Gibt die Gesamtzahl der Zeilen zurück, nachdem die in der where-Klausel angegebenen Bedingungen erfüllt wurden.

Gibt die eindeutige Anzahl der Zeilen zurück, nachdem die in der where-Klausel angegebenen Bedingungen erfüllt wurden

Gibt die Anzahl der Zeilen an. Doppelte Werte werden nicht entfernt.

Es werden alle Zeilen unabhängig von doppelten NULL-Werten berücksichtigt.

Es wird a angegeben eindeutige Anzahl von Zeilen nach dem Entfernen von NULL und doppelten Werten.

Es werden die NULL-Werte in der Ausgabe entfernt.

Die NULL-Werte in der Ausgabe werden nicht entfernt.

Es werden die NULL-Werte in der Ausgabe entfernt.

Ausführungsplan der SQL Count-Funktion

Sehen wir uns den tatsächlichen Ausführungsplan der SQL COUNT DISTINCT-Funktion an. Sie müssen den tatsächlichen Ausführungsplan über die SSMS-Menüleiste wie unten gezeigt aktivieren.

Führen Sie die Abfrage aus, um einen tatsächlichen Ausführungsplan abzurufen Ausführungsplan. In diesem Ausführungsplan sehen Sie die wichtigsten ressourcenverbrauchenden Operatoren:

  • Sortieren (eindeutige Sortierung) – Kosten 78%
  • Tabellenscan – Kosten 22%

Sie können die Maus über den Sortieroperator bewegen und es wird ein Tooltip mit den Operatordetails geöffnet.

In den Eigenschaftenfenstern erhalten Sie außerdem weitere Informationen zum Sortieroperator, einschließlich Speicherzuordnung, Statistik und Anzahl der Zeilen.

In einer Tabelle mit Millionen Datensätzen kann SQL Count Distinct Leistungsprobleme verursachen, da ein bestimmter Zähloperator ein kostspieliger Operator in der ist tatsächlicher Ausführungsplan.

SQL Server 2019 verbessert die Leistung des SQL COUNT DISTINCT-Operators mithilfe einer neuen Approx_count_distinct-Funktion. Diese neue Funktion von SQL Server 2019 bietet eine ungefähre eindeutige Anzahl der Zeilen. Möglicherweise gibt es einen geringfügigen Unterschied zwischen der Ausgabe der SQL Count-Funktion und der Approx_Count_distinct-Funktion.

Sie können SQL COUNT DISTINCT durch das Schlüsselwort Approx_Count_distinct ersetzen, um diese Funktion von SQL Server 2019 zu verwenden.

1
2

SELECT APPROX_COUNT_DISTINCT (Stadt)
FROM Location;

Weitere Informationen zu dieser Funktion finden Sie unter Die neue SQL Server 2019-Funktion Approx_Count_Distinct.

Schlussfolgerung

In diesem Artikel haben wir die SQL COUNT-Funktion anhand verschiedener Beispiele untersucht. Wir haben auch die neue SQL-Funktion Approx_Count_distinct behandelt, die von SQL Server 2019 verfügbar ist. Ich würde vorschlagen, sie gemäß Ihrer Umgebung zu überprüfen. Wenn Sie Kommentare oder Fragen haben, können Sie diese gerne in den Kommentaren unten hinterlassen.

  • Autor
  • Letzte Beiträge
Als MCSA-zertifizierter und Microsoft-zertifizierter Trainer in Gurgaon, Indien, mit 13 Jahren Erfahrung, arbeitet Rajendra für eine Vielzahl großer Unternehmen, die sich auf Leistungsoptimierung, Überwachung und Hochverfügbarkeit konzentrieren und Disaster Recovery-Strategien und -Implementierung. Er ist Autor von Hunderten maßgeblicher Artikel zu SQL Server, Azure, MySQL, Linux, Power BI, Leistungsoptimierung, AWS / Amazon RDS, Git und verwandten Technologien, die bisher von über 10 Millionen Lesern angesehen wurden.
Mit seiner 50-teiligen Serie zu SQL Server Always On Availability Groups ist er der Schöpfer einer der größten kostenlosen Online-Artikelsammlungen zu einem einzigen Thema. Aufgrund seines Beitrags zur SQL Server-Community wurde er mit verschiedenen Preisen ausgezeichnet, darunter der renommierte „Beste Autor des Jahres“ in den Jahren 2020 und 2021 bei SQLShack.
Raj ist immer an neuen Herausforderungen interessiert, wenn Sie also Beratung benötigen Hilfe zu jedem Thema, das in seinen Schriften behandelt wird, kann unter [email protected] erreicht werden.
Alle Beiträge von Rajendra Gupta anzeigen

Neueste Beiträge von Rajendra Gupta (alle anzeigen)
  • Sitzungszeitlimits in SQL Server Immer verfügbar Gruppen – 8. Februar 2021
  • Durchführen kleinerer und größerer Versionsaktualisierungen für AWS RDS SQL Server – 29. Januar 2021
  • Bereitstellen von AWS RDS PostgreSQL-Instanzen – 27. Januar 2021

Write a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.