Wie man Daten mit COUNT- und CASE-Anweisungen in SQL zählt

Durch die Kombination der SQL-Funktion COUNT mit CASE-Anweisungen können Sie Daten basierend auf spezifischen Bedingungen effizient zählen. Dies ermöglicht eine flexiblere Aggregation als einfaches Zählen. In diesem Artikel werden wir die Grundlagen der COUNT-Funktion und der CASE-Anweisungen verstehen und lernen, wie man sie anhand spezifischer SQL-Abfragebeispiele verwendet.

Inhaltsverzeichnis

Grundlagen der COUNT-Funktion

Die COUNT-Funktion wird in SQL verwendet, um die Anzahl der Zeilen in einer Datenbank zu zählen. Sie können sie verwenden, um die Gesamtzahl der Zeilen oder die Anzahl der Zeilen, in denen eine bestimmte Spalte einen Wert hat, zu erhalten.

Zählen aller Zeilen

Um alle Zeilen in einer Tabelle zu zählen, verwenden Sie COUNT(*) wie folgt:

SELECT COUNT(*) FROM table_name;

Zählen der Werte in einer bestimmten Spalte

Um die Zeilen zu zählen, in denen eine bestimmte Spalte einen Wert hat, verwenden Sie COUNT(column_name). NULL-Werte werden nicht gezählt.

SELECT COUNT(column_name) FROM table_name;

Grundlagen der CASE-Anweisung

Die CASE-Anweisung ist ein bedingter Ausdruck, der in SQL verwendet wird, um verschiedene Werte basierend auf festgelegten Bedingungen zurückzugeben. Sie hat eine ähnliche Syntax wie IF-THEN-ELSE-Anweisungen und ermöglicht es Ihnen, spezifische Werte zurückzugeben, wenn bestimmte Bedingungen erfüllt sind, und andere Werte, wenn sie nicht erfüllt sind.

CASE-Anweisungssyntax

Die grundlegende Syntax der CASE-Anweisung ist wie folgt:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE resultN
END

Jede Bedingung wird der Reihe nach ausgewertet und das Ergebnis der ersten wahren Bedingung wird zurückgegeben. Wenn alle Bedingungen falsch sind, wird der ELSE-Teil des Ergebnisses zurückgegeben. Wenn ELSE weggelassen wird, wird NULL zurückgegeben, wenn alle Bedingungen falsch sind.

Einfaches Beispiel

Zum Beispiel, um die Gehälter der Mitarbeiter zu bewerten und Bewertungen basierend auf spezifischen Bereichen zuzuweisen, verwenden Sie die CASE-Anweisung wie folgt:

SELECT name,
       CASE
           WHEN salary >= 100000 THEN 'High'
           WHEN salary >= 50000 THEN 'Medium'
           ELSE 'Low'
       END AS salary_rating
FROM employees;

In diesem Beispiel wird ein Gehalt von 100000 oder mehr als „High“ zurückgegeben, 50000 oder mehr als „Medium“ und alles andere als „Low“.

Kombinieren von COUNT- und CASE-Anweisungen

Durch die Kombination der COUNT-Funktion mit CASE-Anweisungen können Sie Daten basierend auf spezifischen Bedingungen zählen. Dies ermöglicht es Ihnen, mehrere Bedingungen in einer einzigen Abfrage zu bewerten und zu aggregieren.

Grundsyntax für bedingtes Zählen

Die grundlegende Syntax für die Kombination der COUNT-Funktion mit CASE-Anweisungen ist wie folgt:

SELECT
    COUNT(CASE WHEN condition1 THEN 1 END) AS count_condition1,
    COUNT(CASE WHEN condition2 THEN 1 END) AS count_condition2
FROM table_name;

Diese Syntax zählt die Anzahl der Zeilen, die jede Bedingung erfüllen. Die CASE-Anweisung gibt 1 zurück, wenn sie wahr ist, und die COUNT-Funktion zählt diese Vorkommen.

Spezifisches Beispiel

Um beispielsweise die Anzahl der männlichen und weiblichen Kunden in einer Kundentabelle zu zählen, verwenden Sie die folgende Abfrage:

SELECT
    COUNT(CASE WHEN gender = 'Male' THEN 1 END) AS male_count,
    COUNT(CASE WHEN gender = 'Female' THEN 1 END) AS female_count
FROM customers;

Dieses Beispiel zählt die Zeilen, in denen das Geschlecht ‚Male‘ bzw. ‚Female‘ ist.

Zählen mehrerer Bedingungen

Durch die Kombination mehrerer Bedingungen können Sie Daten detaillierter zählen. Um beispielsweise die Anzahl der Produkte mit den Status ‚On Sale‘ und ‚Discontinued‘ zu zählen, verwenden Sie die folgende Abfrage:

SELECT
    COUNT(CASE WHEN status = 'On Sale' THEN 1 END) AS on_sale_count,
    COUNT(CASE WHEN status = 'Discontinued' THEN 1 END) AS discontinued_count
FROM products;

Diese Methode erleichtert die Aggregation von Daten basierend auf spezifischen Bedingungen.

Beispiel-SQL-Abfragen

Hier stellen wir spezifische SQL-Abfragebeispiele vor, die die COUNT-Funktion und CASE-Anweisungen kombinieren, um Daten basierend auf spezifischen Bedingungen zu zählen. Dies wird Ihnen helfen zu verstehen, wie man sie in tatsächlichen Datenbankoperationen verwendet.

Beispiel 1: Zählen von Kunden nach Altersgruppe

Diese Abfrage zählt Kunden in verschiedenen Altersgruppen aus einer Kundentabelle.

SELECT
    COUNT(CASE WHEN age < 20 THEN 1 END) AS 'Under 20',
    COUNT(CASE WHEN age BETWEEN 20 AND 29 THEN 1 END) AS '20s',
    COUNT(CASE WHEN age BETWEEN 30 AND 39 THEN 1 END) AS '30s',
    COUNT(CASE WHEN age BETWEEN 40 AND 49 THEN 1 END) AS '40s',
    COUNT(CASE WHEN age >= 50 THEN 1 END) AS '50 and above'
FROM customers;

Diese Abfrage kategorisiert Kunden in fünf Altersgruppen und zählt die Anzahl in jeder Gruppe.

Beispiel 2: Zählen von Produkten nach Status

Diese Abfrage zählt die Anzahl der Produkte nach ihrem Status aus einer Produkttabelle.

SELECT
    COUNT(CASE WHEN status = 'In Stock' THEN 1 END) AS 'In Stock',
    COUNT(CASE WHEN status = 'Out of Stock' THEN 1 END) AS 'Out of Stock',
    COUNT(CASE WHEN status = 'Discontinued' THEN 1 END) AS 'Discontinued'
FROM products;

Diese Abfrage zählt die Anzahl der Produkte mit den Status ‚In Stock‘, ‚Out of Stock‘ und ‚Discontinued‘.

Beispiel 3: Zählen von Bestellungen nach Status

Diese Abfrage zählt die Anzahl der Bestellungen nach ihrem Status aus einer Bestelltabelle.

SELECT
    COUNT(CASE WHEN status = 'New' THEN 1 END) AS 'New Orders',
    COUNT(CASE WHEN status = 'Processing' THEN 1 END) AS 'Processing Orders',
    COUNT(CASE WHEN status = 'Completed' THEN 1 END) AS 'Completed Orders'
FROM orders;

Diese Abfrage zählt die Anzahl der Bestellungen mit den Status ‚New‘, ‚Processing‘ und ‚Completed‘.

Erweiterte Beispiele

Die Kombination der COUNT-Funktion und CASE-Anweisungen kann auf komplexere Bedingungen zur Datenaggregation angewendet werden. Hier sind einige praktische Beispiele, die in realen Szenarien nützlich sein können.

Beispiel 1: Zählen von Kunden basierend auf Kaufhistorie

Diese Abfrage zählt Kunden basierend darauf, ob sie im letzten Jahr einen Kauf getätigt haben, unter Verwendung einer Kundentabelle und einer Kaufhistorietabelle.

SELECT
    COUNT(CASE WHEN purchase_date >= DATEADD(YEAR, -1, GETDATE()) THEN 1 END) AS 'Customers Purchased in Last Year',
    COUNT(CASE WHEN purchase_date < DATEADD(YEAR, -1, GETDATE()) OR purchase_date IS NULL THEN 1 END) AS 'Customers Not Purchased in Last Year'
FROM customers LEFT JOIN purchase_history ON customers.customer_id = purchase_history.customer_id;

Diese Abfrage zählt Kunden, die innerhalb des letzten Jahres einen Kauf getätigt haben und diejenigen, die dies nicht getan haben.

Beispiel 2: Zählen von Verkäufen nach Produktkategorie

Diese Abfrage zählt die Anzahl der Verkäufe nach Produktkategorie, indem sie die Verkaufstabelle mit der Produkttabelle verbindet.

SELECT
    product_category,
    COUNT(CASE WHEN sales_amount > 0 THEN 1 END) AS 'Sales Count'
FROM sales
JOIN products ON sales.product_id = products.product_id
GROUP BY product_category;

Diese Abfrage zählt die Anzahl der verkauften Produkte in jeder Produktkategorie.

Beispiel 3: Zählen mehrerer Bedingungen

Diese Abfrage zählt Daten durch die Kombination mehrerer Bedingungen. Zum Beispiel die Zählung des Kaufstatus von Kunden nach Altersgruppe.

SELECT
    COUNT(CASE WHEN age < 20 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers Under 20 Who Purchased',
    COUNT(CASE WHEN age BETWEEN 20 AND 29 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 20s Who Purchased',
    COUNT(CASE WHEN age BETWEEN 30 AND 39 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 30s Who Purchased',
    COUNT(CASE WHEN age BETWEEN 40 AND 49 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 40s Who Purchased',
    COUNT(CASE WHEN age >= 50 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers 50 and Above Who Purchased'
FROM customers LEFT JOIN purchase_history ON customers.customer_id = purchase_history.customer_id;

Diese Abfrage zählt die Anzahl der Kunden mit Kaufhistorie nach Altersgruppe.

Fazit

Die Kombination der COUNT-Funktion mit CASE-Anweisungen ermöglicht das effiziente Zählen von Daten basierend auf spezifischen Bedingungen in SQL. Diese Methode ist nicht nur für einfache Aggregationen nützlich, sondern auch für die Bewertung und Analyse von Daten mit mehreren Bedingungen gleichzeitig. Anhand spezifischer Abfragebeispiele haben wir gelernt, wie man diese Techniken in realen Datenbankoperationen anwendet, wie z. B. das Zählen von Kunden nach Altersgruppe oder Produktstatus. Die Nutzung dieser Techniken ermöglicht fortgeschrittenere Datenanalysen und Berichtserstellung.

Inhaltsverzeichnis