sql >> Base de Datos >  >> RDS >> Mysql

Cómo calcular el porcentaje de columna en MySQL

A veces, es posible que deba calcular el porcentaje de una columna (por ejemplo, ventas, ingresos) en sus datos para comprender qué porcentaje del valor total de su columna proviene de cada fila (por ejemplo, país, estado, etc.). Dado que no existe una función lista para usar para calcular este valor, debe escribir una consulta SQL para ello. Aquí se explica cómo calcular el porcentaje de columna en MySQL

Cómo calcular el porcentaje de columna en MySQL

Digamos que tiene la siguiente tabla como se muestra a continuación.

mysql> create table sales(rep varchar(255),sale int);

mysql> insert into sales values('Bob',15),('Sally',30),('Peter',15);

mysql> select * from sales;
+-------+------+
|  rep  | sale |
+-------+------+
|  Bob  |  15  |
| Sally |  30  |
| Peter |  15  |
+-------+------+

Supongamos que desea mostrar una columna de "porcentaje del total", que es simplemente el porcentaje de la venta total. columna, como se muestra a continuación.

+-------+------+------------------+
|  rep  | sale | percent of total |
+-------+------+------------------+
|  Bob  |  15  |        25        |
| Sally |  30  |        50        |
| Peter |  15  |        25        |
+-------+------+------------------+

Puede hacer esto de varias maneras utilizando una sola consulta. No es necesario escribir consultas separadas para calcular el total y el porcentaje. Veamos cada uno de ellos

Lectura adicional: Cómo calcular el porcentaje de dos columnas en MySQL

Cómo calcular el porcentaje de columna en MySQL usando CROSS JOIN

Para calcular el porcentaje de la columna en MySQL, simplemente puede unirse al sum() de venta columna con la tabla original.

SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total`
FROM sales
CROSS JOIN (SELECT SUM(sale) AS s FROM sales) t;

+-------+------+------------------+
|  rep  | sale | percent of total |
+-------+------+------------------+
|  Bob  |  15  |        25        |
| Sally |  30  |        50        |
| Peter |  15  |        25        |
+-------+------+------------------+

Si desea agregar una cláusula where para filtrar sus datos, debe colocarla después de CROSS JOIN, como se muestra a continuación. De lo contrario, recibirá un error.

SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total`
FROM sales
CROSS JOIN (SELECT SUM(sale) AS s FROM sales) t where Rep='Bob';
+------+------+------------------+
| Rep  | Sale | percent of total |
+------+------+------------------+
| Bob  |  15  |       25         |
+------+------+------------------+

Sin embargo, si desea agregar la cláusula where durante el total de la columna, debe agregarla en la cláusula de selección del total, como se muestra a continuación. Digamos que desea excluir a Bob del total en sí, aquí hay una consulta para hacerlo.

SELECT Rep, Sale, Sale * 100 / t.s AS `percent of total` 
FROM sales 
CROSS JOIN (SELECT SUM(sale) AS s FROM sales where Rep<>'Bob') t 
where Rep<>'Bob';
+-------+------+------------------+
|  Rep  | Sale | percent of total |
+-------+------+------------------+
| Sally |  30  |      66.6667     |
| Peter |  15  |      33.3333     |
+-------+------+------------------+

Lectura adicional: Cómo calcular el porcentaje de crecimiento semanal en MySQL

Cómo calcular el porcentaje de columna en MySQL usando SUBSELECT/SUBQUERY

También puede calcular el porcentaje de la columna usando una subselección, en lugar de usar JOIN, como se muestra a continuación.

SELECT Rep, Sale, 
Sale * 100 / (SELECT SUM(sale) AS s FROM sales) AS `percent of total`
FROM sales;

+-------+------+------------------+
|  rep  | sale | percent of total |
+-------+------+------------------+
|  Bob  |  15  |        25        |
| Sally |  30  |        50        |
| Peter |  15  |        25        |
+-------+------+------------------+

Si desea agregar una cláusula where para filtrar sus datos, debe colocarla después de CROSS JOIN, como se muestra a continuación. De lo contrario, recibirá un error.

SELECT Rep, Sale, 
Sale * 100 / (SELECT SUM(sale) AS s FROM sales) AS `percent of total` 
FROM sales
where Rep='Bob';
+--------+--------+-------------------+
|   Rep  |  Sale  |  percent of total |
+--------+--------+-------------------+
|  Bob   |    15  |         25        |
+--------+--------+-------------------+

Sin embargo, si desea agregar la cláusula where durante el total de la columna, debe agregarla en la cláusula de selección del total. Digamos que desea excluir a Bob del total en sí, aquí hay una consulta para hacerlo.

SELECT Rep, Sale, 
Sale * 100 / (SELECT SUM(sale) AS s FROM sales where Rep='Bob') AS `percent of total` 
FROM sales
where Rep='Bob';
+-------+------+------------------+
|  Rep  | Sale | percent of total |
+-------+------+------------------+
| Sally |  30  |      66.6667     |
| Peter |  15  |      33.3333     |
+-------+------+------------------+

Puede personalizar las consultas anteriores según sus requisitos para calcular el porcentaje de columna en MySQL.

Además, puede usar una herramienta de informes para trazar los datos en un gráfico circular o tablero. Este es un ejemplo de un gráfico circular creado con Ubiq.

Si desea crear gráficos, paneles e informes desde la base de datos MySQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.