Zurück zur Artikelliste Artikel
8 Leseminuten

Die SQL-Funktion Count erklärt mit 7 Beispielen

Eine der nützlichsten Aggregatfunktionen in SQL ist die COUNT()-Funktion. Wenn Sie neu in SQL sind und mehr über die verschiedenen Möglichkeiten der Verwendung der COUNT()-Funktion anhand einiger praktischer Beispiele kennenlernen möchten, ist dieser Artikel genau das Richtige für Sie.

Die Funktion COUNT() ist eine der nützlichsten Aggregatfunktionen in SQL. Mit der Funktion COUNT() können Sie die Gesamtzahl der Bestellungen eines Kunden in den letzten Tagen, die Anzahl der Besucher, die eine Eintrittskarte für ein Museum gekauft haben, oder die Anzahl der Mitarbeiter in einer Abteilung zählen.

Bevor wir uns jedoch mit einigen SQL COUNT() Beispielen aus der Praxis befassen, sehen wir uns die Beispielsyntax für die Verwendung der Funktion COUNT() an. Die grundlegende Syntax lautet:

SELECT COUNT([DISTINCT] )
FROM 
WHERE ;

Die Funktion COUNT() erscheint im SELECT Teil der Abfrage und kann einen Spaltennamen als Argument akzeptieren. Optional können Sie das Schlüsselwort DISTINCT angeben, um nur die eindeutigen Vorkommen der Werte zu zählen. Machen Sie sich keine Sorgen, wenn Sie zu diesem Zeitpunkt noch nichts verstehen; ich werde die Verwendung von DISTINCT mit COUNT() später in diesem Artikel anhand von Beispielen erklären.

Lassen Sie uns eintauchen, um die Funktion SQL COUNT() und die verschiedenen Möglichkeiten, sie zu verwenden, anhand einiger praktischer Anwendungsfälle zu verstehen. Zur Veranschaulichung: Nehmen wir an, Sie arbeiten in einem Unternehmen, das Autos und Motorräder verkauft. Sie haben den folgenden Datensatz zur Verfügung.

Die products Tabelle:

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_1949Alpine Renault 1300Classic CarsCMC9858
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102
S10_4757Alfa Romeo GTAClassic Carsnull8568

Die Tabelle hat 5 Spalten mit den folgenden Angaben:

  1. product_code: Ein eindeutiger Code, der jedes Produkt identifiziert.
  2. product_name: Der Name des Autos oder des Motorrads.
  3. product_line: Eine Klassifizierung, die angibt, ob das Produkt ein Auto oder ein Motorrad ist.
  4. product_vendor: Ein Code zur Identifizierung des entsprechenden Verkäufers für das Produkt.
  5. buy_price: Der Preis, den der Verkäufer für das Produkt verlangt.

Angenommen, Sie möchten die Anzahl der Produkte in der Tabelle herausfinden. Hier kann Ihnen die Funktion COUNT() helfen. Die Abfrage sieht etwa so aus:

SELECT COUNT(product_code)
FROM products;

Die Ausgabe:

COUNT(product_code)
5

In dieser Abfrage zählt SQL alle Werte für product_code in der Tabelle products und gibt die Gesamtzahl zurück. Das liegt daran, dass wir die Spalte product_code als Argument an unsere Funktion COUNT() übergeben haben. Alternativ können Sie, wenn Sie nur die Anzahl der Zeilen in der Tabelle products Tabelle berechnen wollen, können Sie etwa so vorgehen:

SELECT COUNT(*)
FROM products;

Die Ausgabe:

COUNT(*)
5

Hier haben wir "*" als Argument für die Funktion verwendet, was SQL einfach anweist, alle Zeilen in der Tabelle zu zählen.

Nehmen wir nun an, Sie möchten alle Produktlinien in der Tabelle zählen. Ausgehend von dem, was Sie im vorherigen Beispiel gelernt haben, würden Sie wahrscheinlich so etwas schreiben.

SELECT COUNT(product_line)
FROM products;

Die Ausgabe:

COUNT(product_line)
5

Die Abfrage gibt 5 als Ausgabe zurück, weil SQL für jede Zeile der Tabelle einen Wert von product_line gezählt hat. Es ist wichtig zu beachten, dass die Funktion COUNT() standardmäßig keine Duplikate berücksichtigt. Zum Beispiel hat die products nur zwei eindeutige Werte für die Spalte product_line - "Motorräder" und "Oldtimer" -, aber unsere Abfrage ergab trotzdem 5 als Wert. Wenn Sie also nur die eindeutigen Werte in der Tabelle zählen wollen, müssen Sie das Schlüsselwort DISTINCT mit Ihrer Funktion COUNT() verwenden.

Die Abfrage:

SELECT COUNT(DISTINCT product_line)
FROM products;

Die Ausgabe:

COUNT(DISTINCT product_line)
2

Da wir in dieser Abfrage explizit das Schlüsselwort DISTINCT im Argument der Funktion COUNT() angegeben haben, zählt SQL nur die eindeutigen Werte von product_line.

Sie können auch Bedingungen in der WHERE Klausel verwenden, um nur bestimmte Zeilen zu zählen. Ein Beispiel: Sie möchten die Anzahl der Produkte ermitteln, die zur Produktlinie "Motorräder" gehören. Dazu können Sie die folgende Abfrage verwenden:

SELECT COUNT(product_code)
FROM products
WHERE product_line = ‘Motorcycles’;

Die Ausgabe:

COUNT(product_code)
3

Hier filtert SQL zunächst alle Zeilen, in denen der Wert von product_line "Motorcycles" ist. Dann zählt es die Anzahl der Produktcodes.

Ein wichtiger Hinweis ist, dass die SQL-Funktion COUNT() beim Zählen NULL nicht berücksichtigt. In der products Tabelle ist der product_vendor Wert für die product_code "S10_4757" NULL. Die folgende Abfrage gibt also den Wert 4 und nicht 5 zurück.

SELECT COUNT(product_vendor)
FROM products;

Die Ausgabe:

COUNT(product_vendor)
4

Während die Werte "HLD", "CMC", "HMD" und "RSD" in die Zählung einbezogen werden, wird NULL ausgeschlossen.

Das SQL COUNT() mit einer GROUP BY-Klausel

Wenn Sie als Analytiker arbeiten (oder dies anstreben) und SQL für die Datenanalyse verwenden, dann verwenden Sie in den meisten Fällen die Funktion COUNT() mit einer GROUP BY Klausel.

Die GROUP BY-Klausel in SQL wird verwendet, um Daten in Gruppen zu aggregieren (gruppieren), um aggregierte Metriken zu berechnen. Die in SQL verfügbaren Aggregatfunktionen sind COUNT(), SUM(), AVG(), MIN() und MAX(). Diese Funktionen geben einen einzigen Wert für mehrere Zeilen zurück. Die Aggregation ist wichtig, da es nicht immer möglich ist, jede einzelne Zeile durchzugehen, um Erkenntnisse zu gewinnen.

Das Gruppieren von Kunden auf der Grundlage ihrer spezifischen Bedürfnisse und Verhaltensweisen (Segmentierung), das Gruppieren von Produkten in verschiedene Typen oder das Gruppieren verschiedener Personen auf der Grundlage ihres Einkommens sind alles Beispiele für Aggregation.

Nehmen wir ein Beispiel mit der Funktion COUNT(), um dies besser zu verstehen. Angenommen, Sie möchten die Anzahl der Produkte in jeder Produktlinie berechnen.

Die Abfrage:

SELECT product_line,
	 COUNT(product_code)
FROM products
GROUP BY product_line;

Die Ausgabe:

product_lineCOUNT(product_code)
Motorcycles3
Classic Cars2

In dieser Abfrage erhält SQL zunächst alle eindeutigen Werte für product_line als erste Spalte und zählt dann die Anzahl der Produkte (product_code), die zu jedem von ihnen gehören. Kurz gesagt, SQL aggregiert alle Zeilen nach Produktlinien und verwendet dann die Aggregatfunktion (in diesem FallCOUNT() ), um die Anzahl der Produkte für jede Produktlinie zu berechnen.

Es ist wichtig, dass Sie alle Spalten (außer dem Teil der Aggregatfunktion), die Sie im SELECT Teil der Abfrage verwenden, in der GROUP BY Klausel angeben. Andernfalls gibt SQL einen Fehler aus. Sie können diesen Artikel durchlesen, um häufige Fehler mit GROUP BY-Klauseln zu verstehen.

In den Beispielen, die ich in diesem Artikel gezeigt habe, wurde die Funktion COUNT() im SELECT Teil der Abfrage verwendet. COUNT() ist jedoch eine vielseitige Funktion; Sie können sie auf verschiedene Weise und in verschiedenen Teilen der Abfrage verwenden. Schauen wir uns das mal an.

Das SQL COUNT() mit Bedingung in einer HAVING-Klausel

Die HAVING-Klausel wird verwendet, um Gruppen auf der Grundlage von Bedingungen für die Aggregatfunktion zu filtern. Nehmen wir zum Beispiel an, Sie möchten nur die aggregierten Gruppen zurückgeben, deren Anzahl über einer bestimmten Zahl liegt.

Stellen Sie sich vor, Sie möchten in unserem Datensatz nur die Produktlinien mit mehr als 2 Produkten betrachten.

Die Abfrage:

SELECT product_line,
	   COUNT(product_code)
FROM products
GROUP BY product_line
HAVING COUNT(product_code)>2;

Die Ausgabe:

product_lineCOUNT(product_code)
Motorcycles3

Die Abfrage funktioniert ähnlich wie die vorherige Abfrage, bei der SQL Zeilen auf der Grundlage eindeutiger Werte von product_line gruppiert und dann die Anzahl der Produkte zurückgibt, die zu jeder Produktlinie gehören, indem die Funktion COUNT() verwendet wird. Da wir uns jedoch entschieden haben, nur die Produktlinien mit mehr als zwei Produkten zu behalten, haben wir die Produktlinie "Classic Cars" (die nur 2 Produkte hat) nicht in den Ergebnissen.

Die SQL-Funktion COUNT() in einer ORDER BY-Klausel

Es kann auch der Fall eintreten, dass Sie alle Produktlinien anzeigen möchten, diese aber nach der Anzahl der Produkte sortieren möchten. In diesem Fall müssen wir die Funktion COUNT() in der ORDER BY-Klausel verwenden.

Die Abfrage:

SELECT   product_line,
	   COUNT(product_code)
FROM     products
ORDER BY COUNT(product_line);

Die Ausgabe:

product_lineCOUNT(product_code)
Classic Cars2
Motorcycles3

In dieser Abfrage gibt SQL eindeutige Produktlinien als Gruppen und die Anzahl der Produkte in jeder Produktlinie als Anzahl zurück. Aufgrund der ORDER BY Klausel werden die Ergebnisse jedoch durch die Funktion COUNT() in aufsteigender Reihenfolge angeordnet.

Die SQL-Funktion COUNT() mit Bedingung in einer WHERE-Klausel

Die Funktion COUNT() kann nicht direkt in einer WHERE Klausel verwendet werden. Wenn Sie also zum Beispiel alle Details von Produkten abrufen möchten, die zu einer Produktlinie mit mindestens 3 Produkten gehören, können Sie diese Abfrage nicht verwenden.

SELECT *
FROM products
WHERE COUNT(product_line)>=3;

Die Ausgabe:

ERROR 1111 (HY000): Invalid use of group function

Sie können dies auch nicht direkt mit den Klauseln GROUP BY und HAVING bewerkstelligen. Das liegt daran, dass Sie damit nur gruppierte Zeilen erhalten, aber nicht alle Details über die Produkte, wie sie hier benötigt werden.

Stattdessen müssen Sie eine so genannte Unterabfrage verwenden (eine Abfrage innerhalb der Hauptabfrage). So sieht Ihre Abfrage aus.

SELECT *
FROM products
WHERE product_line in (SELECT product_line
    			   FROM products
			   GROUP BY product_line
   HAVING COUNT(product_code)>=3);

Die Ausgabe:

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102

Bereit, die Funktion COUNT() zu verwenden?

Nachdem Sie diesen Artikel gelesen haben, sollten Sie nun wissen, wie Sie die Funktion COUNT() verwenden können. Sobald Sie beginnen, die Funktion in Ihren Abfragen zu verwenden, wird sich Ihr Verständnis weiter verbessern.

Wenn Sie neu in SQL sind und eine solide Grundlage schaffen wollen, bevor Sie sich in die praktische Arbeit stürzen, empfehle ich diesen Kurs von LearnSQL.de. Er gefällt mir besonders gut, weil er die grundlegenden Konzepte umfassend abdeckt und Ihnen eine Basis für den Ausbau Ihrer Karriere bietet.

Die Praxis spielt eine große Rolle beim Erlernen von SQL. Üben Sie also weiterhin verschiedene Arten von Abfragen, erweitern Sie Ihre Grenzen und wachsen Sie weiter.

Natürlich ist der erste Schritt der schwierigste. Das Gute daran ist, dass es keinen Mangel an großartigem Lernmaterial auf LearnSQL.de um Sie auf Ihrem Weg zu unterstützen. Fangen Sie also noch heute an!