Calcular porcentaje en MySQL

Mehvish Ashiq 20 junio 2023
  1. Use una columna para calcular el porcentaje en MySQL
  2. Use dos columnas para calcular el porcentaje en MySQL
  3. Utilice la función OVER() para calcular el porcentaje en MySQL
Calcular porcentaje en MySQL

Calcularemos el porcentaje en MySQL usando una o varias columnas. Hay diferentes formas de hacerlo, y para cada enfoque, usaremos una tabla de muestra.

Use una columna para calcular el porcentaje en MySQL

Tenemos una tabla llamada “ventas” donde ID, “Nombre del representante” y “Venta” son nombres de columna. Las siguientes consultas se pueden utilizar para crear y completar la tabla ventas para practicar con este tutorial.

Código de ejemplo:

# 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;

Producción :

+----+--------------------+------+
| ID | RepresentativeName | Sale |
+----+--------------------+------+
|  1 | John               |   15 |
|  2 | Mehvish            |   15 |
|  3 | Saira              |   30 |
+----+--------------------+------+
3 rows in set (0.00 sec)

Para encontrar el porcentaje del campo Venta, podemos CROSS JOIN la función SUM() del atributo Venta con la relación original (tabla). Consulte la siguiente consulta para hacerlo.

Código de ejemplo:

SELECT RepresentativeName, Sale,
round(((Sale * 100) / temp.SalesSum),2) AS Percentage
FROM sales
CROSS JOIN (SELECT SUM(Sale) AS SalesSum FROM sales) temp;

Producción :

+--------------------+------+------------+
| RepresentativeName | Sale | Percentage |
+--------------------+------+------------+
| John               |   15 |      25.00 |
| Mehvish            |   15 |      25.00 |
| Saira              |   30 |      50.00 |
+--------------------+------+------------+
3 rows in set (0.00 sec)

Aquí, usamos el método round() para obtener resultados con dos decimales. Si nos enfocamos en la consulta utilizada para encontrar el porcentaje, podemos ver que estamos usando la subconsulta después de la palabra clave CROSS JOIN para encontrar la suma del atributo Venta.

Use dos columnas para calcular el porcentaje en MySQL

Creamos una tabla llamada tests con un ID, GroupName, EmployeesCount y SurveysCount como nombres de columna donde ID es la CLAVE PRINCIPAL. Use las siguientes consultas para moverse con nosotros a lo largo del tutorial.

Código de ejemplo:

# 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;

Producción :

+----+-----------+----------------+---------------+
| 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)

Usamos la siguiente consulta para calcular el porcentaje usando los campos EmployeesCount y SurveysCount.

Código de ejemplo:

SELECT GroupName, EmployeesCount, SurveysCount, COUNT( SurveysCount ) AS testA,
        concat(round(( SurveysCount/EmployeesCount * 100 ),2),'%') AS Percentage
FROM tests
GROUP BY EmployeesCount;

Producción :

+-----------+----------------+--------------+-------+------------+
| 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)

Calculamos el porcentaje dividiendo el SurveysCount por EmployeesCount y multiplicando por 100. Usamos la función round() para redondearlo por dos decimales para que sea más legible.

Además, concatene con el símbolo % usando la función concat() para que sea fácil de entender.

Utilice la función OVER() para calcular el porcentaje en MySQL

La función OVER() es una de las Funciones de ventana en MySQL que calcula los valores sobre un cierto rango de valores. También podemos usar esta función para calcular porcentajes.

La función OVER() es muy útil y nos ayuda a evitar las subconsultas para calcular porcentajes. Cree una tabla de productos que tenga ProductID, ProductName y SupplierID como nombres de atributos para comprender esta función.

Técnicamente, el SupplierID debe ser una clave externa, pero lo estamos tomando como un campo simple solo para demostración. Utilice las siguientes consultas para crear la tabla de productos e insertar datos.

Código de ejemplo:

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;

Producción :

+-----------+----------------------+------------+
| 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)

Ahora, utilice la siguiente consulta para calcular el porcentaje de productos suministrados por cada proveedor. Usamos la función OVER() en lugar de subconsultas para obtener la suma de los productos.

Código de ejemplo:

SELECT SupplierID AS Supplied_By, count(*) * 100.0 / sum(count(*)) Over() as 'Supplier Percentage'
FROM products
GROUP BY SupplierID;

Producción :

+-------------+---------------------+
| Supplied_By | Supplier Percentage |
+-------------+---------------------+
|           2 |            33.33333 |
|           1 |            16.66667 |
|           3 |            50.00000 |
+-------------+---------------------+
3 rows in set (0.09 sec)
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - MySQL Query