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)