sql >> Databasteknik >  >> RDS >> Mysql

Hur man beräknar procentandelen av kolumn i MySQL

Ibland kan du behöva beräkna procentandelen av en kolumn (t.ex. försäljning, intäkter) i din data för att förstå hur stor procent av kolumnens totala värde som kommer från varje rad (t.ex. land, stat, etc). Eftersom det inte finns någon out-of-the-box-funktion för att beräkna detta värde måste du skriva en SQL-fråga för det. Så här beräknar du procentandelen av kolumnen i MySQL

Hur man beräknar procentandel av kolumn i MySQL

Låt oss säga att du har följande tabell som visas nedan.

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

Låt oss säga att du vill visa en kolumn "procent av totalt" som helt enkelt är procenten av den totala försäljningen kolumn, som visas nedan.

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

Du kan göra detta på flera sätt med bara en enda fråga. Det finns inget behov av att skriva separata frågor för att beräkna total och procent. Låt oss titta på var och en av dem

Bonusläsning: Hur man beräknar procentandelen av två kolumner i MySQL

Hur man beräknar procentandelen av kolumn i MySQL med hjälp av CROSS JOIN

För att beräkna procentandelen av kolumnen i MySQL kan du helt enkelt korsansluta sum() av rea kolumn med den ursprungliga tabellen.

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

Om du vill lägga till en where-klausul för att filtrera dina data, måste du placera den efter CROSS JOIN, som visas nedan. Annars får du ett felmeddelande.

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 om du vill lägga till where-sats under summering av kolumn, måste du lägga till den i select-satsen för total, som visas nedan. Låt oss säga att du vill utesluta Bob från själva summan, så här är en fråga för att göra 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äsning: Hur man beräknar procentuell tillväxt vecka över vecka i MySQL

Hur man beräknar procentandel av kolumn i MySQL med SUBSELECT/SUBQUERY

Du kan också beräkna procentandelen av kolumnen med hjälp av ett underval, istället för att använda ett JOIN, som visas nedan.

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

Om du vill lägga till en where-klausul för att filtrera dina data, måste du placera den efter CROSS JOIN, som visas nedan. Annars får du ett felmeddelande.

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 om du vill lägga till where-sats under summering av kolumn, måste du lägga till den i select-satsen för total. Låt oss säga att du vill utesluta Bob från själva summan, så här är en fråga för att göra 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 anpassa ovanstående frågor enligt ditt krav för att beräkna procentandelen av kolumnen i MySQL.

Vidare kan du använda ett rapporteringsverktyg för att plotta data i ett cirkeldiagram eller instrumentpanel. Här är ett exempel på ett cirkeldiagram skapat med Ubiq.

Om du vill skapa diagram, instrumentpaneler och rapporter från MySQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.

  1. SESSIONTIMEZONE Funktion i Oracle

  2. En översikt över volymnivåreplikering för PostgreSQL med DRBD

  3. Utveckling av feltolerans i PostgreSQL:Tidsresor

  4. Star Trek 3D schackdatamodell