Mysql
 sql >> Database >  >> RDS >> Mysql

Come calcolare la percentuale di colonna in MySQL

A volte potrebbe essere necessario calcolare la percentuale di una colonna (ad es. vendite, entrate) nei dati per capire quale percentuale del valore totale della colonna proviene da ciascuna riga (ad es. Paese, stato, ecc.). Poiché non esiste una funzione predefinita per calcolare questo valore, è necessario scrivere una query SQL per esso. Ecco come calcolare la percentuale di colonna in MySQL

Come calcolare la percentuale di colonna in MySQL

Supponiamo che tu abbia la seguente tabella come mostrato di seguito.

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

Supponiamo che tu voglia visualizzare una colonna "percentuale del totale" che è semplicemente la percentuale della vendita totale colonna, come mostrato di seguito.

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

Puoi farlo in più modi usando solo una singola query. Non è necessario scrivere query separate per il calcolo del totale e della percentuale. Diamo un'occhiata a ciascuno di essi

Bonus Leggi: Come calcolare la percentuale di due colonne in MySQL

Come calcolare la percentuale di colonna in MySQL usando CROSS JOIN

Per calcolare la percentuale di colonna in MySQL, puoi semplicemente unire in modo incrociato il sum() di vendita colonna con la tabella originale.

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

Se vuoi aggiungere una clausola where per filtrare i tuoi dati, devi inserirla dopo il CROSS JOIN, come mostrato di seguito. In caso contrario, riceverai un errore.

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

Tuttavia, se si desidera aggiungere la clausola where durante il conteggio della colonna, è necessario aggiungerla nella clausola select del totale, come mostrato di seguito. Diciamo che vuoi escludere Bob dal totale stesso, quindi ecco una query per farlo.

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

Bonus Leggi: Come calcolare la crescita percentuale settimana dopo settimana in MySQL

Come calcolare la percentuale di colonna in MySQL usando SUBSELECT/SUBQUERY

Puoi anche calcolare la percentuale di colonna usando una sottoselezione, invece di usare un JOIN, come mostrato di seguito.

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

Se vuoi aggiungere una clausola where per filtrare i tuoi dati, devi inserirla dopo il CROSS JOIN, come mostrato di seguito. In caso contrario, riceverai un errore.

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

Tuttavia, se si desidera aggiungere la clausola where durante il conteggio della colonna, è necessario aggiungerla nella clausola select del totale. Diciamo che vuoi escludere Bob dal totale stesso, quindi ecco una query per farlo.

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

Puoi personalizzare le query di cui sopra in base alle tue esigenze per calcolare la percentuale di colonna in MySQL.

Inoltre, puoi utilizzare uno strumento di reporting per tracciare i dati in un grafico a torta o in un dashboard. Ecco un esempio di grafico a torta creato con Ubiq.

Se vuoi creare grafici, dashboard e report dal database MySQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.