0Pricing
SQL Academy · Lektion

CASE in ORDER BY und Aggregationen

Bedingtes Sortieren und Zählen

CASE in ORDER BY und Aggregationen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Sortieren mit benutzerdefinierter Priorität

Die SQL-Klausel ORDER BY sortiert Zeilen normalerweise nach dem natürlichen Wert einer Spalte. Sie können jedoch einen CASE-Ausdruck innerhalb von ORDER BY einfügen, um eine vollständig benutzerdefinierte Sortierreihenfolge zu erstellen – eine Reihenfolge, die keine einzelne Spalte allein erzeugen könnte.

Diese Technik ist besonders nützlich, wenn Geschäftsregeln und nicht Rohdatenwerte die Priorität bestimmen.

SELECT product_name, status
FROM products
ORDER BY
  CASE status
    WHEN 'urgent'   THEN 1
    WHEN 'active'   THEN 2
    WHEN 'pending'  THEN 3
    ELSE                 4
  END;

So funktioniert CASE innerhalb von ORDER BY

Wenn die Datenbank ORDER BY CASE ... END auswertet, berechnet sie für jede Zeile eine Ganzzahl oder einen anderen vergleichbaren Wert. Anschließend werden die Zeilen nach diesem berechneten Wert sortiert – anstelle einer Rohspalte oder zusätzlich zu ihr.

Der CASE-Ausdruck wird nicht gespeichert, sondern existiert nur für die Dauer der Abfrage.

SELECT order_id, priority
FROM orders
ORDER BY
  CASE priority
    WHEN 'high'   THEN 1
    WHEN 'medium' THEN 2
    WHEN 'low'    THEN 3
    ELSE               9
  END,
  order_id;

NULL-Werte ausdrücklich sortieren

Standardmäßig platzieren verschiedene Datenbanken NULL-Werte auf unterschiedliche Weise am Anfang oder Ende eines sortierten Ergebnisses. Mit einem CASE in ORDER BY können Sie unabhängig von der Datenbank-Engine genau festlegen, wo NULL-Werte erscheinen.

SELECT employee_name, manager_id
FROM employees
ORDER BY
  CASE WHEN manager_id IS NULL THEN 0 ELSE 1 END,
  manager_id;

Bedingtes Auf- und Absteigend-Sortieren

Ein CASE in ORDER BY kann auch eine bedingte Sortierrichtung nachbilden. Indem Sie Kategorien negative Zahlen zuordnen, können Sie die Sortierreihenfolge für bestimmte Gruppen effektiv umkehren und für andere die normale Reihenfolge beibehalten.

Das ist nützlich, wenn unterschiedliche Zeilentypen in einem einzigen Ergebnissatz eine unterschiedliche Sortierlogik benötigen.

SELECT task_name, due_date, is_overdue
FROM tasks
ORDER BY
  CASE WHEN is_overdue = 1 THEN 0 ELSE 1 END,
  due_date;

CASE innerhalb von COUNT

Sie können einen CASE-Ausdruck in eine Aggregatfunktion wie COUNT einfügen. Der entscheidende Kniff besteht darin, für die zu zählenden Zeilen einen Wert ungleich NULL und für die zu überspringenden Zeilen NULL zurückzugeben – denn COUNT ignoriert NULL-Werte.

SELECT
  COUNT(CASE WHEN status = 'active'   THEN 1 END) AS active_count,
  COUNT(CASE WHEN status = 'inactive' THEN 1 END) AS inactive_count
FROM users;

CASE innerhalb von SUM – Bedingte Summen

Wenn Sie CASE innerhalb von SUM einsetzen, können Sie Werte nur dann addieren, wenn eine Bedingung wahr ist, und nicht passende Zeilen wie 0 behandeln. Dieses Muster wird häufig für Pivot-artige Berichte verwendet, die eine einzelne Spalte in mehrere Messwertspalten aufteilen.

SELECT
  SUM(CASE WHEN region = 'North' THEN sales_amount ELSE 0 END) AS north_total,
  SUM(CASE WHEN region = 'South' THEN sales_amount ELSE 0 END) AS south_total,
  SUM(CASE WHEN region = 'East'  THEN sales_amount ELSE 0 END) AS east_total
FROM sales;

Bedingte AVG-Berechnung mit CASE

Dasselbe Muster funktioniert mit AVG. Da AVG NULL-Werte ignoriert, ergibt die Rückgabe von NULL für auszuschließende Zeilen den Durchschnitt ausschließlich der passenden Zeilen – ganz ohne Unterabfrage.

SELECT
  AVG(CASE WHEN department = 'Engineering' THEN salary END) AS avg_eng_salary,
  AVG(CASE WHEN department = 'Marketing'   THEN salary END) AS avg_mkt_salary
FROM employees;

Gruppieren mit CASE – Zeilen in Buckets einteilen

Sie können CASE in der GROUP BY- oder SELECT-Liste verwenden, um kontinuierliche Werte in Kategorien einzuteilen und anschließend jeden Bucket zu aggregieren. Dadurch wird eine numerische Spalte in benannte Gruppen umgewandelt, ohne die zugrunde liegenden Daten zu verändern.

SELECT
  CASE
    WHEN age < 18             THEN 'Under 18'
    WHEN age BETWEEN 18 AND 35 THEN '18-35'
    WHEN age BETWEEN 36 AND 55 THEN '36-55'
    ELSE                            '56+'
  END AS age_group,
  COUNT(*) AS user_count
FROM users
GROUP BY
  CASE
    WHEN age < 18             THEN 'Under 18'
    WHEN age BETWEEN 18 AND 35 THEN '18-35'
    WHEN age BETWEEN 36 AND 55 THEN '36-55'
    ELSE                            '56+'
  END;

Alias verwenden oder CASE wiederholen

Das Wiederholen eines langen CASE-Ausdrucks in SELECT und GROUP BY ist umständlich. Einige Datenbanken (MySQL, PostgreSQL mit entsprechenden Umgehungslösungen) erlauben es, im ORDER BY auf den Alias zu verweisen, aber nicht im GROUP BY. Der sicherste, datenbankübergreifend kompatible Ansatz besteht darin, die Abfrage in eine Unterabfrage oder CTE einzuschließen und dort nach dem Alias zu gruppieren.

WITH scored AS (
  SELECT
    customer_id,
    CASE
      WHEN total_spent >= 1000 THEN 'Gold'
      WHEN total_spent >= 500  THEN 'Silver'
      ELSE                          'Bronze'
    END AS tier
  FROM customers
)
SELECT tier, COUNT(*) AS customer_count
FROM scored
GROUP BY tier
ORDER BY
  CASE tier
    WHEN 'Gold'   THEN 1
    WHEN 'Silver' THEN 2
    ELSE               3
  END;

ORDER BY CASE mit ASC / DESC kombinieren

Nach dem CASE-Ausdruck können Sie weiterhin ASC oder DESC anhängen und durch Kommas getrennt weitere Sortierspalten hinzufügen. Die CASE-Bewertung ist nur der erste Sortierschlüssel; nachfolgende Spalten lösen Gleichstände auf die übliche Weise.

SELECT
  ticket_id,
  category,
  created_at
FROM support_tickets
ORDER BY
  CASE category
    WHEN 'billing'  THEN 1
    WHEN 'outage'   THEN 2
    WHEN 'feature'  THEN 3
    ELSE                 4
  END ASC,
  created_at ASC;

Praxisbeispiel — Vertriebsdashboard

Hier ist eine realistische Abfrage, die ein auf CASE basierendes Aggregat mit einer auf CASE basierenden Sortierung kombiniert. Sie erstellt eine nach Regionen aufgeschlüsselte Verkaufsübersicht, die so sortiert ist, dass die umsatzstärkste Region immer zuerst erscheint und „Other“ ans Ende gesetzt wird.

SELECT
  CASE
    WHEN region IN ('North', 'South', 'East', 'West') THEN region
    ELSE 'Other'
  END AS region_label,
  SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sales,
  COUNT(CASE WHEN status = 'refunded' THEN 1 END)           AS refund_count
FROM orders
GROUP BY
  CASE
    WHEN region IN ('North', 'South', 'East', 'West') THEN region
    ELSE 'Other'
  END
ORDER BY completed_sales DESC;

Wissenscheck

Testen Sie Ihr Verständnis für die Verwendung von CASE innerhalb von ORDER BY und Aggregatfunktionen.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt, CASE mit ORDER BY und Aggregatfunktionen zu kombinieren:

  • CASE in ORDER BY — benutzerdefinierte Sortierwerte für Zeilen vergeben, steuern, an welcher Stelle NULL-Werte erscheinen, und mehrere Sortierregeln in einer Abfrage kombinieren.
  • CASE in COUNT — für einzubeziehende Zeilen einen Wert ungleich NULL zurückgeben, für zu überspringende Zeilen NULL (implizit oder explizit).
  • CASE in SUM / AVG — 0 oder NULL als ELSE-Wert verwenden, um bedingte Summen und Mittelwerte in einem Durchlauf zu bilden.
  • CASE in GROUP BY — kontinuierliche oder kategorische Werte für die Aggregation in beschriftete Gruppen einteilen.

Diese Muster machen viele Unterabfragen überflüssig und erleichtern das Erstellen von Berichten im Pivot-Stil mit einfachem SQL.

Häufig gestellte Fragen

Ist die Lektion „CASE in ORDER BY und Aggregationen“ kostenlos?

Ja — der vollständige Text von „CASE in ORDER BY und Aggregationen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „CASE in ORDER BY und Aggregationen“?

Bedingtes Sortieren und Zählen Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „CASE in ORDER BY und Aggregationen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Der CASE-Ausdruck
  2. Gesuchtes und einfaches CASE
  3. Daten kategorisieren und beschriften
  4. CASE in ORDER BY und Aggregationen
← Zurück zu SQL Academy