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.