Berechnen Sie den Prozentsatz in MySQL
- Verwenden Sie eine Spalte, um den Prozentsatz in MySQL zu berechnen
- Verwenden Sie zwei Spalten, um den Prozentsatz in MySQL zu berechnen
- Verwenden Sie die Funktion
OVER()
, um den Prozentsatz in MySQL zu berechnen

Wir berechnen den Prozentsatz in MySQL mit einer oder mehreren Spalten. Es gibt verschiedene Möglichkeiten, dies zu tun, und für jeden Ansatz verwenden wir eine Beispieltabelle.
Verwenden Sie eine Spalte, um den Prozentsatz in MySQL zu berechnen
Wir haben eine Tabelle mit dem Namen sales
, wobei ID
, RepresentativeName
und Sale
Spaltennamen sind. Die folgenden Abfragen können verwendet werden, um die Tabelle sales
zu erstellen und zu füllen, um mit diesem Tutorial zu üben.
Beispielcode:
# create a table CREATE TABLE sales ( ID INT NOT NULL, RepresentativeName VARCHAR(45) NOT NULL, Sale INT NOT NULL, PRIMARY KEY (ID)); # insert data INSERT INTO sales (ID, RepresentativeName, Sale) VALUES (1, 'John', 15), (2, 'Mehvish', 15), (3, 'Saira', 30); # display sales table data SELECT * FROM sales;
Ausgang:
+----+--------------------+------+ | ID | RepresentativeName | Sale | +----+--------------------+------+ | 1 | John | 15 | | 2 | Mehvish | 15 | | 3 | Saira | 30 | +----+--------------------+------+ 3 rows in set (0.00 sec)
Um den Prozentsatz des Felds Sale
zu finden, können wir die Funktion SUM()
des Attributs Sale
mit der ursprünglichen Relation (Tabelle) CROSS JOIN
machen. Sehen Sie sich dazu die folgende Abfrage an.
Beispielcode:
SELECT RepresentativeName, Sale, round(((Sale * 100) / temp.SalesSum),2) AS Percentage FROM sales CROSS JOIN (SELECT SUM(Sale) AS SalesSum FROM sales) temp;
Ausgang:
+--------------------+------+------------+ | RepresentativeName | Sale | Percentage | +--------------------+------+------------+ | John | 15 | 25.00 | | Mehvish | 15 | 25.00 | | Saira | 30 | 50.00 | +--------------------+------+------------+ 3 rows in set (0.00 sec)
Hier verwenden wir die Methode round()
, um Ergebnisse mit zwei Dezimalstellen zu erhalten. Wenn wir uns auf die Abfrage konzentrieren, die verwendet wurde, um den Prozentsatz zu finden, können wir sehen, dass wir die Unterabfrage nach dem Schlüsselwort CROSS JOIN
verwenden, um die Summe des Attributs Sale
zu finden.
Verwenden Sie zwei Spalten, um den Prozentsatz in MySQL zu berechnen
Wir erstellen eine Tabelle namens tests
mit ID
, GroupName
, EmployeesCount
und SurveysCount
als Spaltennamen, wobei ID
der PRIMARY KEY
ist. Verwenden Sie die folgenden Abfragen, um sich mit uns durch das Tutorial zu bewegen.
Beispielcode:
# create a table CREATE TABLE tests ( ID INT NOT NULL, GroupName VARCHAR(45) NOT NULL, EmployeesCount INT NOT NULL, SurveysCount INT NOT NULL, PRIMARY KEY (ID)); # insert data INSERT INTO tests (ID, GroupName, EmployeesCount, SurveysCount) VALUES (1, 'Group A', '200', '10'), (2, 'Group B', '300', '200'), (3, 'Group C', '400', '300'); # display tests table data SELECT * FROM tests;
Ausgang:
+----+-----------+----------------+---------------+ | ID | GroupName | EmployeesCount | SurveysCount | +----+-----------+----------------+---------------+ | 1 | Group A | 200 | 10 | | 2 | Group B | 300 | 200 | | 3 | Group C | 400 | 300 | +----+-----------+----------------+---------------+ 3 rows in set (0.00 sec)
Wir verwenden die folgende Abfrage, um den Prozentsatz mithilfe der Felder EmployeesCount
und SurveysCount
zu berechnen.
Beispielcode:
SELECT GroupName, EmployeesCount, SurveysCount, COUNT( SurveysCount ) AS testA, concat(round(( SurveysCount/EmployeesCount * 100 ),2),'%') AS Percentage FROM tests GROUP BY EmployeesCount;
Ausgang:
+-----------+----------------+--------------+-------+------------+ | GroupName | EmployeesCount | SurveysCount | testA | Percentage | +-----------+----------------+--------------+-------+------------+ | Group A | 200 | 10 | 1 | 5.00% | | Group B | 300 | 200 | 1 | 66.67% | | Group C | 400 | 300 | 1 | 75.00% | +-----------+----------------+--------------+-------+------------+ 3 rows in set (0.00 sec)
Wir berechnen den Prozentsatz, indem wir SurveysCount
durch EmployeesCount
dividieren und mit 100 multiplizieren. Wir verwenden die Funktion round()
, um ihn auf zwei Dezimalstellen zu runden, um ihn besser lesbar zu machen.
Verketten Sie es außerdem mit dem Symbol %
mit der Funktion concat()
, um es leicht verständlich zu machen.
Verwenden Sie die Funktion OVER()
, um den Prozentsatz in MySQL zu berechnen
Die Funktion OVER()
ist eine der Fensterfunktionen in MySQL, die die Werte über einen bestimmten Wertebereich berechnet. Wir können diese Funktion auch verwenden, um Prozentsätze zu berechnen.
Die Funktion OVER()
ist sehr nützlich und hilft uns, die Unterabfragen zur Berechnung von Prozentsätzen zu vermeiden. Erstellen Sie eine products
-Tabelle mit ProductID
, ProductName
und SupplierID
als Attributnamen, um diese Funktion zu verstehen.
Technisch gesehen muss die SupplierID
ein Fremdschlüssel sein, aber wir nehmen es als einfaches Feld nur zur Demonstration. Verwenden Sie die folgenden Abfragen, um die Tabelle Produkte
zu erstellen und Daten einzufügen.
Beispielcode:
CREATE TABLE products ( ProductID INT NOT NULL, ProductName VARCHAR(45) NOT NULL, SupplierID INT NOT NULL, PRIMARY KEY (ProductID)); INSERT INTO products (ProductID, ProductName, SupplierID) VALUES (1,'Coca Cola', 2), (2, 'Wavy Chips', 2), (3, 'Dairy Milk Chocolate', 1), (4, 'Parley Biscuits', 3), (5, 'Knorr Nodles', 3), (6, 'Snickers Chocolate', 3); SELECT * FROM products;
Ausgang:
+-----------+----------------------+------------+ | ProductID | ProductName | SupplierID | +-----------+----------------------+------------+ | 1 | Coca Cola | 2 | | 2 | Wavy Chips | 2 | | 3 | Dairy Milk Chocolate | 1 | | 4 | Parley Biscuits | 3 | | 5 | Knorr Nodles | 3 | | 6 | Snickers Chocolate | 3 | +-----------+----------------------+------------+ 6 rows in set (0.00 sec)
Verwenden Sie nun die folgende Abfrage, um den Prozentsatz der von jedem Lieferanten gelieferten Produkte zu berechnen. Wir verwenden die Funktion OVER()
anstelle von Unterabfragen, um die Summe der Produkte zu erhalten.
Beispielcode:
SELECT SupplierID AS Supplied_By, count(*) * 100.0 / sum(count(*)) Over() as 'Supplier Percentage' FROM products GROUP BY SupplierID;
Ausgang:
+-------------+---------------------+ | Supplied_By | Supplier Percentage | +-------------+---------------------+ | 2 | 33.33333 | | 1 | 16.66667 | | 3 | 50.00000 | +-------------+---------------------+ 3 rows in set (0.09 sec)