Kumulative Verteilung und Anteil an der Gesamtsumme
Laufende Prozentsätze und den Anteil an der Gesamtsumme innerhalb von Partitionen berechnen
Kumulative Verteilung und Anteil an der Gesamtsumme ist eine kostenlose SQL 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 SQL Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Die Frage zum prozentualen Anteil am Gesamtwert
Eine Standardfrage in Vorstellungsgesprächen zur Berichterstellung lautet: „Welchen Prozentsatz des Gesamtumsatzes macht jede Kategorie aus?“ Eine verwandte kumulative Frage lautet: „Wie hoch ist der laufende Anteil am Gesamtwert?“
Der Kniff besteht darin, den Wert jeder Zeile durch ein Fensteraggregat zu teilen, das über die gesamte Partition berechnet wird. Die Erkenntnis, dass Sie eine Gesamtsumme in einer Fensterfunktion berechnen können, ohne einen Self-Join zu benötigen, ist der eigentliche Prüfpunkt.
Window-SUM ohne ORDER BY = Gesamtsumme
Hier ist der entscheidende Schritt: SUM(amount) OVER () mit einem leeren OVER und ohne ORDER BY liefert die Summe des gesamten Ergebnisses, die in jeder Zeile wiederholt wird.
Da es kein ORDER BY gibt, gibt es keinen laufenden Frame; der Standard-Frame ist daher die gesamte Partition. Diese Gesamtsumme in jeder Zeile ist genau der Nenner, den Sie für den prozentualen Anteil am Gesamtwert benötigen.
SELECT
category,
amount,
SUM(amount) OVER () AS grand_total
FROM category_sales;Den prozentualen Anteil am Gesamtwert berechnen
Teilen Sie den Zeilenwert durch die als Fensterfunktion berechnete Gesamtsumme und multiplizieren Sie das Ergebnis mit 100. Wandeln Sie den Wert in eine Dezimalzahl um, damit eine Ganzzahldivision nicht zu 0 gekürzt wird.
Diese Abfrage in einem einzigen Durchlauf ersetzt das frühere Muster, bei dem eine Unterabfrage für die Gesamtsumme mit den Detailzeilen verknüpft wurde. Sie ist kürzer, schneller und klar lesbar.
SELECT
category,
amount,
ROUND(
100.0 * amount / SUM(amount) OVER (),
2
) AS pct_of_total
FROM category_sales;Die Falle der Ganzzahldivision
Ein klassischer Trick in Vorstellungsgesprächen: In vielen Datenbanken führt amount / total bei Ganzzahlspalten zu einer Ganzzahldivision, sodass ein Ergebnis kleiner als 1 zu 0 wird.
Beheben Sie das, indem Sie zuerst mit 100.0 (einem numerischen Literal) multiplizieren oder einen Operanden umwandeln: amount::numeric / total. Wenn Sie das vergessen, erhalten Sie eine Spalte voller Nullen, was Interviewer sofort bemerken.
SELECT
category,
amount * 1.0 / SUM(amount) OVER () AS share,
CAST(amount AS DECIMAL) / SUM(amount) OVER () AS share_alt
FROM category_sales;Prozentualer Anteil am Gesamtwert innerhalb einer Gruppe
Fügen Sie PARTITION BY hinzu, damit sich der Anteil jeder Zeile auf ihre Gruppe statt auf die gesamte Tabelle bezieht. Zum Beispiel der prozentuale Anteil jedes Produkts am Umsatz seiner eigenen Region.
Der Nenner SUM(amount) OVER (PARTITION BY region) wird jetzt pro Region zurückgesetzt, sodass sich die Prozentwerte innerhalb jeder Region zu 100 summieren.
SELECT
region,
product,
amount,
ROUND(
100.0 * amount / SUM(amount) OVER (PARTITION BY region),
2
) AS pct_of_region
FROM regional_sales;Laufender prozentualer Anteil am Gesamtwert
Kombinieren Sie einen kumulativen Zähler mit einem festen Nenner, um den laufenden Anteil am Gesamtwert zu erhalten: den Anteil der Gesamtsumme, der bis zu jeder Zeile aufgelaufen ist.
Der Zähler verwendet ORDER BY (kumulativ), der Nenner ein leeres OVER () (Gesamtsumme). Die letzte Zeile erreicht immer 100 %.
SELECT
sale_date,
amount,
ROUND(
100.0 * SUM(amount) OVER (ORDER BY sale_date)
/ SUM(amount) OVER (),
2
) AS running_pct
FROM daily_sales;CUME_DIST: Kumulative Verteilung
SQL verfügt über eine integrierte Funktion für die kumulative Verteilung: CUME_DIST(). Sie gibt den Anteil der Zeilen zurück, deren ORDER BY-Wert kleiner oder gleich dem Wert der aktuellen Zeile ist – eine Zahl im Bereich (0, 1].
Im Gegensatz zu einem manuell berechneten laufenden Anteil eines Betrags bezieht sich CUME_DIST auf die Position einer Zeile und beantwortet die Frage: „Welcher Anteil der Zeilen liegt bei oder unter diesem Wert?“ Das ist für perzentilartige Auswertungen nützlich.
SELECT
score,
CUME_DIST() OVER (ORDER BY score) AS cume_dist
FROM exam_results;PERCENT_RANK und der Unterschied dazu
Eine verwandte Funktion ist PERCENT_RANK(), definiert als (rank - 1) / (total_rows - 1) und mit einem Wertebereich von 0 bis 1.
Der entscheidende Unterschied im Vorstellungsgespräch: CUME_DIST schließt die aktuelle Zeile in den Zähler ein („bei oder unter“), während PERCENT_RANK ein relativer Rang ist, der für die erste Zeile bei 0 beginnt. Die Funktionen liefern unterschiedliche Werte, und sie zu verwechseln, ist ein häufiger Fehler.
SELECT
score,
CUME_DIST() OVER (ORDER BY score) AS cd,
PERCENT_RANK() OVER (ORDER BY score) AS pr
FROM exam_results;Pareto-/80-20-Analyse
Der laufende prozentuale Anteil am Gesamtwert ermöglicht die Pareto-Analyse: „Welche Top-Kunden machen 80 % des Umsatzes aus?“ Sortieren Sie absteigend nach amount, berechnen Sie den laufenden Anteil und filtern Sie dann, sobald der kumulative Anteil erstmals 80 % überschreitet.
Da Ergebnisse von Fensterfunktionen nicht in WHERE verwendet werden können, kapseln Sie die Berechnung in einem CTE und filtern in der äußeren Abfrage – dieselbe Regel gilt für jede Fensterfunktion.
WITH ranked AS (
SELECT
customer_id,
revenue,
SUM(revenue) OVER (ORDER BY revenue DESC)
/ SUM(revenue) OVER () AS running_share
FROM customer_revenue
)
SELECT *
FROM ranked
WHERE running_share <= 0.80;Rundung und Abgleich
Achtung: Wenn Sie jeden Prozentsatz auf 2 Dezimalstellen runden, kann die Summe der Spalte statt exakt 100 entweder 99,99 oder 100,01 ergeben. Im Vorstellungsgespräch werden Sie möglicherweise gefragt, wie Sie sicherstellen, dass die Summe der Einzelteile dem Ganzen entspricht.
Häufige Antworten sind: nur für die Anzeige runden, für Berechnungen die volle Genauigkeit beibehalten oder eine Anpassung nach dem Verfahren des größten Rests auf eine Zeile anwenden. Es ist wichtiger, das Problem zu benennen, als die konkrete Lösung zu nennen.
Wichtige Punkte fürs Vorstellungsgespräch
Diese Kernaussagen sollten Sie erläutern können:
SUM(x) OVER ()ohne ORDER BY = die Gesamtsumme in jeder Zeile.- Multiplizieren Sie mit
100.0, um eine Ganzzahldivision zu vermeiden. PARTITION BYfür Anteile pro Gruppe.- Kumulativer Zähler über einem Nenner mit der Gesamtsumme = laufender Anteil.
CUME_DISTundPERCENT_RANKfür Verteilungen; Sie sollten den Unterschied kennen.- Verwenden Sie eine CTE für Pareto- oder Schwellenwertfilter.
Kurztest
Wie erhalten Sie die Gesamtsumme der gesamten Ergebnismenge in jeder Zeile?
Zusammenfassung: Verteilung und Anteil an der Gesamtsumme
Der Anteil an der Gesamtsumme ergibt sich, indem Sie einen Zeilenwert durch SUM(x) OVER () teilen, also durch die in jeder Zeile zurückgegebene Gesamtsumme. Multiplizieren Sie immer mit 100.0, um eine Ganzzahldivision zu vermeiden, und fügen Sie PARTITION BY für Anteile pro Gruppe hinzu. Ein kumulativer Zähler über einem Nenner mit der Gesamtsumme ergibt einen laufenden Anteil, der bei 100 % endet und die Grundlage der Pareto-Analyse bildet.
Für eine positionsbasierte Verteilung verwenden Sie CUME_DIST und PERCENT_RANK, und denken Sie an den Hinweis zur Abstimmung von Rundungsabweichungen. Damit sind laufende Summen und gleitende Mittelwerte abgeschlossen.
Häufig gestellte Fragen
Ist die Lektion „Kumulative Verteilung und Anteil an der Gesamtsumme“ kostenlos?
Ja — der vollständige Text von „Kumulative Verteilung und Anteil an der Gesamtsumme“ 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 Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Kumulative Verteilung und Anteil an der Gesamtsumme“?
Laufende Prozentsätze und den Anteil an der Gesamtsumme innerhalb von Partitionen berechnen Du übst SQL 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 SQL Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. SQL 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 „Kumulative Verteilung und Anteil an der Gesamtsumme“?
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 Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede SQL 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
- Kumulative Summen mit Fensterrahmen
- Fensterrahmen mit ROWS oder RANGE
- Gleitende Mittelwerte über ein verschiebbares Fenster
- Kumulative Verteilung und Anteil an der Gesamtsumme