Zurück zur Artikelliste Artikel
10 Leseminuten

Verbessern Sie Ihre Abfragen: 7 SQL-Tricks für Fortgeschrittene, die jeder Analyst kennen sollte

SQL-Kenntnisse beschränken sich nicht nur auf das Schreiben einfacher Abfragen – sie beginnen, wenn Sie Daten in Erkenntnisse umwandeln. Lernen Sie sieben SQL-Tricks für Fortgeschrittene, die jeder Analyst kennen sollte, um intelligenter zu analysieren, schneller zu arbeiten und Muster aufzudecken, die Ihre grundlegenden Abfragen nicht zeigen können.

Wenn Sie sich bereits mit SELECT, JOIN und WHERE auskennen, ist es an der Zeit, einen Schritt weiter zu gehen. SQL endet nicht bei SELECT – wenn Sie ein professioneller Datenanalyst werden möchten, müssen Sie über die Grundlagen hinausgehen und anfangen, wie jemand zu denken, der Daten in Antworten umwandelt. Mit fortgeschrittenem SQL wird die Analyse interessant – wenn Sie aufhören, Rohdaten zu extrahieren, und anfangen, Erkenntnisse zu gewinnen, die tatsächlich Geschäftsentscheidungen vorantreiben.

In diesem Artikel stellen wir Ihnen sieben SQL-Tricks für Fortgeschrittene vor, mit denen jeder Datenanalyst smarter und schneller arbeiten kann. Diese Techniken sind praktische, realitätsnahe Fähigkeiten, mit denen Sie Ihre Abfragen leistungsfähiger und effizienter gestalten und für fortgeschrittene Analysen vorbereiten können.

Bei hilft Ihnen unser Kurs „SQL für die Datenanalyse” dabeiLearnSQL.de, vom Schreiben einfacher Abfragen zum tieferen Verständnis von Daten überzugehen. Im Folgenden finden Sie sieben SQL-Tricks, die jeder Datenanalyst beherrschen sollte, um seine Abfragen schneller, sauberer und aufschlussreicher zu gestalten.

1. Verwenden Sie CASE WHEN für bedingte Spalten

Häufig müssen Analysten ihre eigenen Kategorien erstellen – beispielsweise um VIP-Kunden von normalen Kunden zu trennen oder Transaktionen als „hoch“ oder „niedrig“ wertvoll zu kennzeichnen. Filter zeigen Ihnen zwar vorhandene Gruppen an, aber manchmal müssen Sie Ihre eigenen definieren. Hier hilft CASE WHEN. Es handelt sich um einen Standard-SQL-Ausdruck, der wie eine IF-Anweisung funktioniert und es Ihnen ermöglicht, bedingte Logik direkt in Ihre Abfragen einzubauen, um Daten zu segmentieren oder Geschäftsregeln dynamisch anzuwenden.

Beispiel:

SELECT 
  customer_id, 
  total_spent, 
  CASE 
    WHEN total_spent > 1000 THEN 'VIP' 
    WHEN total_spent BETWEEN 500 AND 1000 THEN 'Regular' 
    ELSE 'New' END AS customer_segment 
FROM customers;

Das passiert in dieser Abfrage: Zunächst werden die ID und die Gesamtausgaben jedes Kunden aus der Kundentabelle ausgewählt. Dann durchläuft die CASE Ausdruck jede Zeile durch und überprüft den Wert von total_spent in der Reihenfolge überprüft. Wenn ein Kunde mehr als 1000 ausgegeben hat, weist SQL ihm die Bezeichnung 'VIP'. Ist dies nicht der Fall, geht es zur nächsten Bedingung über – Kunden, die zwischen 500 und 1000 ausgegeben haben, erhalten die Bezeichnung 'Regular'. Alle anderen fallen in die 'New' Kategorie, die durch die ELSE .

Die CASE Ausdruck stoppt, sobald er die erste wahre Bedingung findet, wodurch sichergestellt wird, dass jeder Kunde genau einer Kategorie zugeordnet wird. Die endgültige Ausgabe enthält eine neue Spalte, customer_segment, die die durch diese Regeln festgelegte Bezeichnung widerspiegelt. Mit diesem Ansatz können Sie einfache Geschäftslogik direkt in Ihr SQL einbetten, wodurch Ihre Berichte oder Dashboards ohne zusätzliche Datenbereinigung oder manuelle Klassifizierung sofort aussagekräftiger werden.

Weitere Informationen zu CASE Ausdruck in unserem Artikel SQL CASE WHEN erklärt: 10 einfache Beispiele für Anfänger

2. Kombinieren Sie CASE WHEN mit GROUP BY und SUM

Manchmal müssen Sie Ihre eigenen Zusammenfassungsmetriken erstellen – beispielsweise um zu zählen, wie viele Bestellungen mit hohem, mittlerem und niedrigem Wert jede Region generiert. Die Standardgruppierung kann nur vorhandene Spalten zusammenfassen, aber für die Geschäftsanalyse sind oft benutzerdefinierte Definitionen erforderlich. Hier kommt die Kombination von CASE WHEN mit GROUP BY und Aggregatfunktionen wie SUM oder COUNT wird hier besonders leistungsstark. Damit können Sie mehrere bedingungsbasierte Statistiken in einer einzigen Abfrage berechnen – eine saubere Methode, um Rohdaten in aussagekräftige Geschäftseinblicke umzuwandeln.

Beispiel:

SELECT 
  region, 
  SUM(CASE WHEN total_amount > 1000 THEN 1 ELSE 0 END) 
    AS high_value_orders, 
  SUM(CASE WHEN total_amount BETWEEN 500 AND 1000 THEN 1 ELSE 0 END) 
    AS mid_value_orders, 
  SUM(CASE WHEN total_amount < 500 THEN 1 ELSE 0 END) 
    AS low_value_orders 
FROM orders 
GROUP BY region;

Diese Abfrage gruppiert Bestellungen nach Region und zählt, wie viele in verschiedene Wertkategorien fallen. Für jede Bestellung überprüft die CASE den Ausdruck total_amount und gibt 1 zurück, wenn die Bedingung wahr ist, oder 0 wenn sie nicht wahr ist. Die SUM addiert dann die Einsen, um die Gesamtwerte für jede Kategorie innerhalb einer Region zu ermitteln.

Dieses Muster ist nützlich, um die Geschäftsleistung zu vergleichen – beispielsweise um festzustellen, welche Regionen mehr hochwertige Transaktionen generieren, oder um zu verfolgen, wie sich die Auftragsgrößen in den verschiedenen Märkten unterscheiden. Anstatt mehrere Abfragen zu schreiben, können Sie alles in einer Ansicht mit CASE WHEN mit GROUP BY.

Sie können lernen, wie Sie mit CASE, COUNT, SUMund GROUP BY in unserem Kurs für Fortgeschrittene Erstellen einfacher SQL-Berichte.

3. Zusammenfassungen mit ROLLUP vereinfachen

Bei der Analyse von Daten über einen bestimmten Zeitraum hinweg – beispielsweise Umsätze nach Monat und Jahr – sind oft mehrere Aggregationsebenen erforderlich: Monatssummen, Jahressummen und eine Gesamtsumme. In der Regel wären dafür mehrere separate Abfragen oder UNION Anweisungen. ROLLUP löst dieses Problem auf elegante Weise. Es erweitert GROUP BY automatisch um Zwischensummen und Gesamtsummen und eignet sich daher ideal für Finanzberichte, Dashboards oder Zusammenfassungen.

Beispiel:

SELECT 
  EXTRACT(YEAR FROM order_date) AS year, 
  EXTRACT(MONTH FROM order_date) AS month, 
  SUM(total_amount) AS total_sales 
FROM orders 
GROUP BY ROLLUP(
  EXTRACT(YEAR FROM order_date), 
  EXTRACT(MONTH FROM order_date)) 
ORDER BY year, month;

Ergebnis:

yearmonthtotal_sales
2023185,000
2023290,500
2023NULL175,500
2024192,000
2024295,300
2024NULL187,300
NULLNULL362,800

Hier ROLLUP(year, month) wird SQL angewiesen, die Daten zunächst nach Jahr und Monat zu gruppieren, dann eine zusätzliche Zeile hinzuzufügen, die jedes Jahr zusammenfasst, und schließlich eine weitere Zeile, die die Gesamtsumme über alle Jahre hinweg anzeigt. Überall, wo Sie NULL im Ergebnis sehen, handelt es sich um eine Zwischensumme oder Gesamtsumme, die automatisch von ROLLUP.

Dies erleichtert die Erstellung zeitbasierter Zusammenfassungen in einer einzigen Abfrage, zum Beispiel:

  • Monatliche und jährliche Umsatzberichte.
  • Website-Besuche nach Tag, Monat und insgesamt.
  • Ausgabenverfolgung pro Abteilung mit unternehmensweiten Summen.

Kurz gesagt ROLLUP ist eine schnelle und zuverlässige Methode, um hierarchische Zusammenfassungen direkt in SQL zu erstellen – ohne Tabellenkalkulationsformeln oder manuelle Aggregation.

Erfahren Sie mehr über ROLLUP und anderen GROUP BY Erweiterungen in unserem Kurs für Fortgeschrittene GROUP BY Erweiterungen in SQL.

4. Umgang mit fehlenden Daten mit COALESCE und NULLIF

Das ROLLUP-Beispiel zeigt ein häufiges Problem: Zwischensummenzeilen verwenden NULL, um fehlende Gruppierungsebenen darzustellen, was die Lesbarkeit der Ergebnisse erschweren kann. Generell NULL Werten in Daten häufig Verwirrung – leere Zellen in Berichten, fehlender Text in Dashboards oder unvollständige Berechnungen in Aggregaten. Jeder Datenanalyst sollte wissen, wie man NULLeffektiv umgehen kann, da nicht verwaltete fehlende Werte zu falschen Schlussfolgerungen oder fehlgeschlagenen Abfragen führen können. Glücklicherweise bietet SQL einfache Tools, um diese Werte aussagekräftiger und einfacher zu verarbeiten zu machen: COALESCE und NULLIF.

Verwendung von COALESCE: Ersetzen von NULL durch lesbare Werte

COALESCE gibt den ersten nichtNULL Wert aus einer Liste zurück und ermöglicht es Ihnen, das NULL Bezeichnung durch etwas Aussagekräftigeres ersetzen können.

Beispiel:

SELECT 
  COALESCE(region, 'Total') AS region_label, 
  SUM(total_amount) AS total_sales 
FROM orders 
GROUP BY ROLLUP(region);

Ergebnis:

regiontotal_sales
East85,000
West92,300
Total177,300

Hier COALESCE(region, 'Total') ersetzt NULL aus der Zwischensummenzeile durch eine lesbare Bezeichnung. Auf dieselbe Weise können Sie fehlende Zahlen (COALESCE(discount, 0)) oder Textwerte (COALESCE(name, 'Unknown')).

Verwendung von NULLIF: Vermeidung von Division-durch-Null-Fehlern

NULLIF macht das Gegenteil – es konvertiert einen bestimmten Wert in NULL. Die praktischste Anwendung ist die Vermeidung von Division durch Null in Berechnungen.

Beispiel:

SELECT 
  product_id, 
  sales, 
  returns, 
  sales / NULLIF(returns, 0) AS sales_to_returns_ratio 
FROM product_stats;

Wenn die Rückgabe gleich Null ist, NULLIF(returns, 0) gibt NULL, wodurch SQL keinen Fehler wegen Division durch Null ausgibt.

Durch die Beherrschung von COALESCE und NULLIFbeherrschen, können Analysten ihre Abfragen zuverlässiger und lesbarer gestalten und so sicherstellen, dass fehlende Daten niemals genauen Erkenntnissen im Wege stehen.

5. Beherrschen Sie die Bearbeitung von Datum und Uhrzeit

Daten sind das Herzstück fast jeder Analyse – sei es die Verfolgung der monatlichen Einnahmen, der wöchentlichen Kundenbindung, der vierteljährlichen Abwanderung oder des jährlichen Wachstums. Aber rohe Zeitstempel haben selten das Format, das Sie benötigen. Um aussagekräftige Erkenntnisse zu gewinnen, müssen Sie oft Teile eines Datums extrahieren, Zeitintervalle berechnen oder Zeitzonen anpassen. Ein Datenanalyst sollte wissen, wie man:

  • Datensätze chronologisch sortieren,
  • bestimmte Teile eines Datums oder einer Uhrzeit extrahieren (Jahr, Monat, Tag, Stunde, Minute),
  • Zeitintervalle addieren oder subtrahieren,
  • Daten für Berichte formatieren,
  • Zeitzonen umrechnen und
  • Konvertierungen zwischen Datums- und Zeichenfolgen- oder Zeitstempeltypen durchführen.

SQL bietet Funktionen für all diese Aufgaben.

Beispiel:

SELECT 
  EXTRACT(YEAR FROM order_date) AS year, 
  EXTRACT(MONTH FROM order_date) AS month, 
  COUNT(order_id) AS orders 
FROM orders 
GROUP BY 
  EXTRACT(YEAR FROM order_date), 
  EXTRACT(MONTH FROM order_date) 
ORDER BY year, month;

Diese Abfrage gruppiert alle Bestellungen nach Jahr und Monat, um zu zählen, wie viele in jedem Zeitraum aufgegeben wurden. EXTRACT Extrahiert Teile eines Datums – hier das Jahr und den Monat aus order_date. Die GROUP BY verwendet diese extrahierten Werte, um Daten nach Zeiträumen zu aggregieren, und ORDER BY sorgt dafür, dass die Ergebnisse chronologisch angezeigt werden.

Sobald Sie verstanden haben, wie Sie Datumsangaben extrahieren und bearbeiten können, können Sie Ihre Analyse ganz einfach erweitern – vergleichen Sie das Wachstum von Monat zu Monat, messen Sie durchschnittliche Bestellintervalle oder berechnen Sie Kundenbindungsfenster. Mit diesen Fähigkeiten können Sie Zeitstempel in Erkenntnisse umwandeln, die reale Geschäftszyklen widerspiegeln.

(Holen Sie sich unser SQL-Spickzettel für die Datenanalyse, um diese Funktionen an einem Ort zu sehen.

6. Verwenden Sie JSON-Funktionen für semistrukturierte Daten

Immer mehr Geschäftsdaten stammen heute aus REST-APIs – Webdiensten, die Informationen im JSON-Format (JavaScript Object Notation) zurückgeben. JSON ist eine leichtgewichtige, halbstrukturierte Methode zur Speicherung von Daten unter Verwendung von Schlüssel-Wert-Paaren, Arrays und verschachtelten Objekten. Eine API könnte beispielsweise Folgendes zurückgeben:

{"user_id": 42, "device": "mobile", "location": {"country": "US", "city": "Boston"}}

Diese Art von Daten ist flexibel, passt aber nicht ohne Weiteres in Standard-SQL-Tabellen. Eine einzelne Spalte kann ein gesamtes JSON-Objekt enthalten, wodurch die Verwendung traditioneller SQL-Operatoren wie = oder LIKE zum Extrahieren von Werten zu verwenden. Aus diesem Grund enthalten moderne Datenbanken JSON-Funktionen wie JSON_EXTRACT() in MySQL oder JSON_VALUE() in SQL Server. Mit ihnen können Sie semistrukturierte Daten direkt abfragen, filtern und aggregieren.

Beispiel:

SELECT 
  JSON_EXTRACT(user_data, '$.device') AS device_type, 
  COUNT(*) AS users 
FROM events 
GROUP BY device_type;

Hier speichert die Spalte user_data JSON-Objekte, die Benutzersitzungen beschreiben. Die Funktion JSON_EXTRACT(user_data, '$.device') ruft den Wert des device Schlüssels (wie 'mobile' oder 'desktop') für jede Zeile ab. Die Abfrage gruppiert dann die Ergebnisse nach Gerätetyp und zählt, wie viele Benutzer zu jeder Kategorie gehören.

Die Möglichkeit, mit JSON zu arbeiten, bedeutet, dass Sie Daten aus modernen Systemen – API-Antworten, App-Protokolle oder Tracking-Ereignisse – analysieren können, ohne sie zuvor umformen zu müssen. Dies ist eine unverzichtbare Fähigkeit für Analysten, die mit Daten arbeiten, die nicht vollständig strukturiert sind, aber dennoch wertvolle Erkenntnisse liefern.

7. Organisieren Sie Abfragen mit Common Table Expressions (CTEs)

Mit zunehmenden SQL-Kenntnissen werden Ihre Abfragen natürlich länger – mehrere Verknüpfungen, Filter und Aggregationen in einer einzigen Anweisung. Das ist großartig für die Analyse, aber schwer zu lesen und zu pflegen. Common Table Expressions (CTEs) machen komplexe Abfragen übersichtlicher und einfacher zu verwalten. Mit ihnen können Sie einen temporären, benannten Ergebnissatz definieren, auf den Sie innerhalb derselben Abfrage verweisen können. Stellen Sie sich eine CTE als eine wiederverwendbare Unterabfrage mit einem Namen vor.

CTEs sind besonders nützlich, wenn:

  • Sie eine mehrstufige Analyse in logische Teile aufteilen müssen,
  • dieselbe Berechnung mehrmals verwendet wird oder
  • Sie Teile einer größeren Abfrage separat debuggen und testen möchten.

Beispiel:

WITH monthly_sales AS ( 
  SELECT 
    EXTRACT(YEAR FROM order_date) AS year, 
    EXTRACT(MONTH FROM order_date) AS month, 
    SUM(amount) AS total_sales 
   FROM orders 
   GROUP BY 
     EXTRACT(YEAR FROM order_date), 
     EXTRACT(MONTH FROM order_date) 
) 
SELECT 
  year, 
  month, 
  total_sales 
FROM monthly_sales 
WHERE total_sales > 50000 
ORDER BY year, month;

Hier berechnet die CTE mit dem Namen monthly_sales berechnet den Gesamtumsatz pro Monat und Jahr. Sie fungiert wie eine temporäre Tabelle, die nur für die Dauer der Abfrage existiert. Die äußere Abfrage filtert dann dieses Ergebnis, um nur Monate anzuzeigen, in denen der Umsatz 50.000 überschritten hat.

Diese Struktur verbessert die Lesbarkeit und erleichtert die Erweiterung der Abfrage – Sie könnten beispielsweise monthly_sales mit einer Zieltabelle verknüpfen oder Wachstumsraten berechnen, ohne die Aggregationslogik neu schreiben zu müssen. CTEs sind ein unverzichtbares Werkzeug für Analysten, die mehrschichtige, datengesteuerte Berichte erstellen oder komplexe SQL-Abfragen übersichtlich und wartbar halten müssen.

Weitere Informationen zu Common Table Expressions finden Sie in unserem Fortgeschrittenenkurs Rekursive Abfragen.

Weiterentwicklung Ihrer SQL-Superkräfte

Jede dieser Techniken hilft Ihnen dabei, intelligentere und flexiblere Abfragen zu schreiben – solche, die Zeit sparen und Teams beeindrucken.

Wenn Sie bereit sind, über die Grundlagen hinauszugehen und echte analytische Fähigkeiten aufzubauen, entdecken Sie SQL für die Datenanalyse. Der Kurs deckt alles von mittleren bis fortgeschrittenen Berichten ab, alles mit praktischen Übungen.

Möchten Sie vollen Zugriff auf alle von uns angebotenen Kurse? Mit dem Alle für immer SQL-Paket erhalten Sie lebenslangen Zugriff auf alle aktuellen und zukünftigen Kurse und Tracks – das beste Preis-Leistungs-Verhältnis und eine einmalige Zahlung, die sich für Ihre gesamte Karriere auszahlt.

Lernen Sie weiter, stellen Sie weiter Abfragen und verbessern Sie sich weiter.