HOWTO · MySQL

Berechnen Sie den Prozentsatz in MySQL

Dieses Tutorial beschreibt verschiedene Methoden zur Berechnung des Prozentsatzes in MySQL mit einer oder mehreren Spalten.

Auf dieser Seite

Um einen Prozentsatz in MySQL zu berechnen, teilen Sie den Anteil durch das Ganze und multiplizieren Sie das Ergebnis mit 100: (part / whole) * 100. Der Nenner bestimmt, was das Ergebnis aussagt. Für den Anteil einer Zeile verwenden Sie die Summe aller Zeilen, für ein Verhältnis die Vergleichsspalte und für gruppierte Anteile die Summe über alle Gruppen. Die folgenden Beispiele zeigen diese Muster und wie Sie das Ergebnis runden oder formatieren.

Den prozentualen Anteil einer Zeile an der Gesamtsumme berechnen

Angenommen, die Tabelle sales enthält die Spalten ID, RepresentativeName und Sale mit den Verkaufswerten 15, 15 und 30. Die Gesamtsumme beträgt 60; damit entfallen auf die einzelnen Zeilen 25 %, 25 % und 50 %. Berechnen Sie die Gesamtsumme einmal in einer Unterabfrage und kombinieren Sie deren einzeiliges Ergebnis anschließend mit jedem Verkauf per CROSS JOIN: SELECT s.RepresentativeName, s.Sale, ROUND(s.Sale * 100.0 / totals.SalesSum, 2) AS Percentage FROM sales AS s CROSS JOIN (SELECT SUM(Sale) AS SalesSum FROM sales) AS totals;. Durch 100.0 wird die Prozentberechnung mit Dezimalzahlen durchgeführt, statt sich auf ganzzahlige Division zu stützen. ROUND(..., 2) rundet das numerische Ergebnis auf zwei Nachkommastellen. Mit diesem kleinen Beispiel können Sie dieselbe Berechnung für den ersten Verkauf nachvollziehen:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

sale = 15
total = 60
percentage = sale * 100 / total
print(f"{percentage:.2f}%")

Der Nenner muss ungleich null sein, damit das Verhältnis aussagekräftig ist. Falls die Tabelle keine Verkäufe enthalten kann oder die Gesamtsumme null sein kann, behandeln Sie diesen Fall ausdrücklich, zum Beispiel mit NULLIF(totals.SalesSum, 0) als Nenner.

Einen Prozentsatz aus zwei Spalten berechnen

Für ein zeilenbezogenes Verhältnis teilen Sie den Zähler durch den Nenner derselben Zeile. Enthält tests die Spalten GroupName, EmployeesCount und SurveysCount, berechnet sich der Umfrageanteil als SurveysCount / EmployeesCount * 100. Beispielsweise entsprechen 10 Umfragen unter 200 Beschäftigten 5 %. Eine direkte Abfrage lautet: SELECT GroupName, EmployeesCount, SurveysCount, ROUND(SurveysCount * 100.0 / NULLIF(EmployeesCount, 0), 2) AS Percentage FROM tests;. NULLIF wandelt eine Beschäftigtenzahl von null in NULL um. Das Ergebnis ist dann NULL, statt eine Division durch null auszuführen. Diese Abfrage benötigt weder COUNT() noch GROUP BY, denn jede Quellzeile enthält bereits die beiden zu vergleichenden Werte. Werden die Werte stattdessen aus mehreren Datensätzen aggregiert, legen Sie zuerst fest, welcher Zähler und welcher Nenner gemeint sind, und aggregieren Sie beide konsistent.

Den prozentualen Anteil jeder Gruppe an der Gesamtsumme mit einer Fensterfunktion berechnen

Um den Anteil jedes Lieferanten an allen Produkten zu ermitteln, zählen Sie zunächst die Produkte je Lieferant und teilen anschließend jede Anzahl durch die Gesamtzahl über alle Gruppen. Eine Fensteraggregation stellt diese Gesamtsumme für jede gruppierte Zeile bereit: SELECT SupplierID, COUNT(*) AS ProductCount, ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 2) AS SupplierPercentage FROM products GROUP BY SupplierID;. Das innere COUNT(*) zählt die Produkte des jeweiligen Lieferanten; SUM(COUNT(*)) OVER () summiert diese Gruppenanzahlen, ohne die gruppierten Zeilen zusammenzufassen. Bei sechs Produkten, die sich mit zwei, einem und drei Produkten auf die Lieferanten verteilen, betragen die Anteile 33,33 %, 16,67 % und 50,00 %. Dieser Nenner umfasst die von den gruppierten Abfragezeilen dargestellte Gesamtzahl. Filter wirken sich daher sowohl auf die Gruppen als auch auf deren Gesamtsumme aus. Die Abfrage setzt Unterstützung für Fensterfunktionen in MySQL voraus. Prüfen Sie bei Bedarf in der Serverdokumentation, ob Ihre Bereitstellung diese Funktion unterstützt.

Prozentergebnisse runden und formatieren

ROUND(value, 2) ist eine numerische Funktion, die auf zwei Nachkommastellen rundet. Lassen Sie den Wert numerisch, wenn Sie ihn sortieren, vergleichen oder für weitere Berechnungen verwenden möchten. Um in einem MySQL-Ergebnis ein Prozentzeichen anzuzeigen, verwenden Sie CONCAT(ROUND(value, 2), '%'). Dadurch entsteht Text und kein numerischer Prozentsatz; außerdem bleiben nachgestellte Nullen möglicherweise nicht wie bei einer numerischen Formatierung erhalten. Wählen Sie den Nenner passend zur Frage: die Summe der gesamten Tabelle für den Anteil einer Zeile, eine zweite Spalte für ein Verhältnis oder die Summe der gruppierten Zeilen für den Anteil jeder Gruppe. Verwenden Sie in jedem Fall Dezimalrechnung und legen Sie fest, wie die Anwendung einen Nenner von null darstellen soll.