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

Sådan beregnes procentdel af kolonne i MySQL

Nogle gange skal du muligvis beregne procentdelen af ​​en kolonne (f.eks. salg, omsætning) i dine data for at forstå, hvor stor en procentdel af din kolonnes samlede værdi, der kommer fra hver række (f.eks. land, stat osv.). Da der ikke er nogen out-of-the-box-funktion til at beregne denne værdi, skal du skrive en SQL-forespørgsel til den. Sådan beregnes procentdelen af ​​kolonnen i MySQL

Sådan beregnes procentdelen af ​​kolonne i MySQL

Lad os sige, at du har følgende tabel som vist nedenfor.

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

Lad os sige, at du vil vise en kolonne "procent af total", som blot er procentdelen af ​​det samlede salg kolonne, som vist nedenfor.

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

Du kan gøre dette på flere måder ved blot at bruge en enkelt forespørgsel. Der er ingen grund til at skrive separate forespørgsler til beregning af total og procent. Lad os se på hver af dem

Bonuslæsning: Sådan beregnes procentdelen af ​​to kolonner i MySQL

Sådan beregnes procentdelen af ​​kolonne i MySQL ved hjælp af CROSS JOIN

For at beregne procentdelen af ​​kolonnen i MySQL kan du blot krydsforene sum() af salg kolonne med den oprindelige tabel.

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

Hvis du vil tilføje en where-klausul for at filtrere dine data, skal du placere den efter CROSS JOIN, som vist nedenfor. Ellers får du en fejl.

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

Men hvis du vil tilføje where-klausulen under sammenlægning af kolonne, skal du tilføje den i select-klausulen af ​​total, som vist nedenfor. Lad os sige, at du vil ekskludere Bob fra selve totalen, så er her en forespørgsel om at gøre det.

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

Bonuslæser: Sådan beregner du vækst i procent uge over uge i MySQL

Sådan beregnes procentdelen af ​​kolonne i MySQL ved hjælp af SUBSELECT/SUBQUERY

Du kan også beregne procentdelen af ​​kolonnen ved at bruge et undervalg i stedet for at bruge et JOIN, som vist nedenfor.

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

Hvis du vil tilføje en where-klausul for at filtrere dine data, skal du placere den efter CROSS JOIN, som vist nedenfor. Ellers får du en fejl.

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

Men hvis du ønsker at tilføje where-klausul under sammenlægning af kolonne, skal du tilføje den i select-klausulen af ​​total. Lad os sige, at du vil ekskludere Bob fra selve totalen, så er her en forespørgsel om at gøre det.

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

Du kan tilpasse ovenstående forespørgsler efter dit krav om at beregne procentdelen af ​​kolonnen i MySQL.

Yderligere kan du bruge et rapporteringsværktøj til at plotte dataene i et cirkeldiagram eller dashboard. Her er et eksempel på et cirkeldiagram oprettet ved hjælp af Ubiq.

Hvis du vil oprette diagrammer, dashboards og rapporter fra MySQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.

  1. Nye Oracle-kompatibilitetsfunktioner i PostgresPlus Advanced Server 9.3Beta

  2. Stop (lang) kørende SQL-forespørgsel i PostgreSQL, når session eller anmodninger ikke længere eksisterer?

  3. Når DRY-princippet ikke gælder:BITWISE-operationer i SQL Server

  4. 4 måder at finde duplikerede rækker i MySQL