0Pricing
Coding Interview Prep · Lektion

Aggregatfunktionen ohne GROUP BY

Erfahren, wie ein einfaches Aggregat eine gesamte Tabelle zu einer Zeile zusammenfasst

Aggregatfunktionen ohne GROUP BY ist eine kostenlose Coding Interview Prep-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 Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Eine Aggregatfunktion, eine Zeile

Mit dieser Frage prüfen Interviewer ein grundlegendes Konzept: "Was passiert, wenn Sie eine Aggregatfunktion ohne GROUP BY verwenden?"

Die Antwort lautet: Die gesamte Tabelle wird zu einer einzigen Zeile zusammengefasst. Die Aggregatfunktion behandelt alle passenden Zeilen als eine große implizite Gruppe. Wenn Sie dieses Modell der "impliziten Gruppe" verstehen, können Sie viele darauf aufbauende Regeln nachvollziehen. Sehen wir es uns daher sorgfältig an.

Die implizite einzige Gruppe

Wenn Sie eine einzelne Aggregatfunktion ohne GROUP BY schreiben, verhält sich SQL so, als gäbe es eine Gruppe, die jede Zeile enthält. Das Ergebnis besteht immer genau aus einer Zeile, unabhängig davon, wie viele Zeilen die Tabelle enthält — auch wenn die Tabelle leer ist.

SELECT COUNT(*) FROM employees gibt also eine Zeile mit einer Zahl zurück, die die gesamte Tabelle zusammenfasst.

SELECT COUNT(*) AS total_employees
FROM employees;
-- always returns exactly one row

Mehrere Aggregatfunktionen zusammen

Sie können mehrere Aggregatfunktionen in einem SELECT auflisten. Sie fassen alle dieselbe implizite Gruppe zusammen, sodass Sie weiterhin genau eine Zeile mit mehreren Spalten erhalten.

Das ist die übliche Abfrage nach den "zusammengefassten Statistiken". Alle vier Zahlen beschreiben dieselbe vollständige Zeilenmenge.

SELECT
  COUNT(*)     AS num_rows,
  SUM(salary)  AS total_pay,
  AVG(salary)  AS avg_pay,
  MAX(salary)  AS top_pay
FROM employees;

Der Fehler beim Mischen

Hier gilt die am häufigsten geprüfte Regel: Sie können eine einzelne Aggregatfunktion und eine nicht aggregierte Spalte nicht im selben SELECT ohne GROUP BY kombinieren.

Warum? Die Aggregatfunktion erzeugt eine Zeile, aber eine normale Spalte hat viele Werte — welcher davon sollte angezeigt werden? Das ist mehrdeutig, daher gibt Standard-SQL einen Fehler aus.

-- ERROR: name is not aggregated and there is no GROUP BY
SELECT name, MAX(salary)
FROM employees;

Warum das mehrdeutig ist

Betrachten Sie es anhand unserer Tabelle: MAX(salary) fasst alle Zeilen zu einem Wert zusammen. name hat jedoch in jeder Zeile einen anderen Wert. Die einzelne Zusammenfassungszeile kann nicht fünf Namen in einer Zelle enthalten.

Die Datenbank weigert sich zu raten. Das ist dasselbe Prinzip wie bei der GROUP-BY-Regel: Jede ausgewählte Spalte muss entweder aggregiert werden oder Teil der Gruppe sein. Ohne GROUP BY sind nur Aggregatfunktionen zulässig.

MySQLs großzügige Ausnahme

Eine erwähnenswerte Besonderheit eines SQL-Dialekts: Ältere oder nicht strikt konfigurierte Versionen von MySQL erlaubten die gemischte Abfrage und gaben einen beliebigen Namen zurück — nicht unbedingt den Namen der Person mit dem höchsten Gehalt.

Modernes MySQL weist die Abfrage mit aktiviertem ONLY_FULL_GROUP_BY (heute die Standardeinstellung) wie alle anderen Systeme zurück. Wenn Sie dies erwähnen, zeigen Sie Ihre Kenntnisse verschiedener SQL-Dialekte, aber behandeln Sie eine solche gemischte Abfrage immer als falsch.

Die Zeile hinter dem Maximum abrufen

Wie erhalten Sie also den Namen des bestbezahlten Mitarbeiters? Nicht durch das Mischen von Spalten. Verwenden Sie ORDER BY + LIMIT oder eine Unterabfrage, die mit dem Aggregatwert vergleicht.

Die Variante mit ORDER BY/LIMIT ist am einfachsten. Die Variante mit der Unterabfrage lässt sich gut verallgemeinern und gibt alle Mitarbeiter zurück, die den Maximalwert teilen.

-- Subquery: returns everyone earning the max
SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

Aggregatfunktionen bei einer leeren Tabelle

Ein Grenzfall, den Interviewer gerne einbauen, lautet: "Was gibt eine einzelne Aggregatfunktion bei einer leeren Tabelle zurück?"

  • COUNT(*) gibt 0 zurück (eine Zeile mit dem Wert 0).
  • SUM, AVG, MIN und MAX geben NULL zurück (eine Zeile mit dem Wert NULL).

Wichtig ist: Sie erhalten weiterhin eine Zeile zurück, niemals null Zeilen. Diese Garantie für eine einzelne Zeile ist der Kern einer Aggregatfunktion ohne GROUP BY.

SELECT COUNT(*) AS c, SUM(salary) AS s, MAX(salary) AS m
FROM employees
WHERE 1 = 0;
-- one row: c=0, s=NULL, m=NULL

Keine Aggregatfunktionen in WHERE

Eine weitere Regel, die sich aus diesem Modell ergibt: Sie können eine Aggregatfunktion nicht in eine WHERE-Klausel aufnehmen, da WHERE einzelne Zeilen vor der Aggregation filtert.

Um nach einem Aggregatergebnis zu filtern, verwenden Sie HAVING (mit Gruppierung) oder kapseln die Aggregatfunktion in einer Unterabfrage. WHERE wird in der Ausführungsreihenfolge einfach zu früh ausgeführt, um das Aggregatergebnis sehen zu können.

-- ERROR: aggregate not allowed in WHERE
-- SELECT * FROM employees WHERE salary > AVG(salary);

-- Correct: compare to the aggregate via subquery
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Einzelne Aggregatfunktion vs. GROUP BY

Stellen Sie sich den Unterschied vor:

  • Ohne GROUP BY: eine implizite Gruppe = die gesamte Tabelle = genau eine Ergebniszeile.
  • Mit GROUP BY col: eine Gruppe pro unterschiedlichem Wert von col = eine Zeile pro Gruppe.

Eine einzelne Aggregatfunktion ohne GROUP BY entspricht also GROUP BY mit null Gruppierungsspalten. Dieselbe Verarbeitung, nur als ein großer Sammelbehälter.

-- Whole table: one row
SELECT AVG(salary) FROM employees;

-- Per department: one row each
SELECT department, AVG(salary)
FROM employees
GROUP BY department;

So erklären Sie es

Eine klare Antwort lautet: "Eine Aggregatfunktion ohne GROUP BY behandelt die gesamte Ergebnismenge als eine implizite Gruppe und gibt genau eine Zusammenfassungszeile zurück, auch bei einer leeren Tabelle. Sie können daneben keine nicht aggregierte Spalte auswählen, weil deren Wert mehrdeutig wäre. Um die Zeile hinter einem MAX- oder MIN-Wert abzurufen, verwende ich ORDER BY mit LIMIT oder eine Unterabfrage, die mit der Aggregatfunktion vergleicht."

Kurze Überprüfung

Sagen Sie die Form des Ergebnisses voraus.

Zusammenfassung

Aggregatfunktionen ohne GROUP BY kurz zusammengefasst:

  • Die gesamte Tabelle wird zu einer impliziten Gruppe → genau eine Ergebniszeile.
  • Sie können eine einzelne Aggregatfunktion nicht mit einer nicht aggregierten Spalte kombinieren.
  • Leere Tabelle: COUNT(*) = 0, die anderen Funktionen geben NULL zurück, und zwar weiterhin in einer Zeile.
  • Aggregatfunktionen dürfen nicht in WHERE vorkommen; verwenden Sie eine Unterabfrage oder HAVING.
  • Um die Zeile hinter MIN/MAX abzurufen, verwenden Sie ORDER BY + LIMIT oder eine Unterabfrage.

Damit sind die Interviewübungen zu Aggregatfunktionen abgeschlossen.

Häufig gestellte Fragen

Ist die Lektion „Aggregatfunktionen ohne GROUP BY“ kostenlos?

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

Was lerne ich in „Aggregatfunktionen ohne GROUP BY“?

Erfahren, wie ein einfaches Aggregat eine gesamte Tabelle zu einer Zeile zusammenfasst Du übst Coding Interview Prep 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 Coding Interview Prep zu starten?

Keine Vorkenntnisse erforderlich. Coding Interview Prep 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 „Aggregatfunktionen ohne GROUP BY“?

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 Coding Interview Prep-Lektion Code schreiben und ausführen?

Ja. Jede Coding Interview Prep-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. COUNT(*) vs. COUNT(column) vs. COUNT(DISTINCT)
  2. SUM und AVG mit NULL-Werten
  3. MIN, MAX und Aggregation nichtnumerischer Werte
  4. Aggregatfunktionen ohne GROUP BY
← Zurück zu Coding Interview Prep