sql >> Databáze >  >> RDS >> Mysql

Jak vypočítat procento sloupce v MySQL

Někdy může být nutné vypočítat procento sloupce (např. prodeje, tržby) v datech, abyste pochopili, jaké procento celkové hodnoty sloupce pochází z každého řádku (např. země, stát atd.). Protože neexistuje žádná předem připravená funkce pro výpočet této hodnoty, musíte pro ni napsat dotaz SQL. Zde je návod, jak vypočítat procento sloupce v MySQL

Jak vypočítat procento sloupce v MySQL

Řekněme, že máte následující tabulku, jak je zobrazena níže.

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

Řekněme, že chcete zobrazit sloupec „procento z celkového počtu“, což je jednoduše procento z celkového prodeje sloupec, jak je uvedeno níže.

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

Můžete to udělat několika způsoby pomocí jediného dotazu. Pro výpočet součtu a procenta není třeba psát samostatné dotazy. Podívejme se na každou z nich

Bonusové čtení: Jak vypočítat procento dvou sloupců v MySQL

Jak vypočítat procento sloupce v MySQL pomocí CROSS JOIN

Chcete-li vypočítat procento sloupce v MySQL, můžete jednoduše spojit sum() z prodeje sloupec s původní tabulkou.

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

Pokud chcete přidat klauzuli where k filtrování dat, musíte ji umístit za CROSS JOIN, jak je znázorněno níže. V opačném případě se zobrazí chyba.

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

Pokud však chcete přidat klauzuli where během sčítání sloupce, musíte ji přidat do klauzule select of total, jak je znázorněno níže. Řekněme, že chcete vyloučit Boba ze samotného součtu, pak je zde dotaz, jak to udělat.

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

Bonusové čtení: Jak vypočítat procento růstu týden po týdnu v MySQL

Jak vypočítat procento sloupce v MySQL pomocí SUBSELECT/SUBQUERY

Můžete také vypočítat procento sloupce pomocí dílčího výběru namísto použití JOIN, jak je uvedeno níže.

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

Pokud chcete přidat klauzuli where k filtrování dat, musíte ji umístit za CROSS JOIN, jak je znázorněno níže. V opačném případě se zobrazí chyba.

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

Pokud však chcete přidat klauzuli where během sčítání sloupce, musíte ji přidat do klauzule select of total. Řekněme, že chcete vyloučit Boba ze samotného součtu, pak je zde dotaz, jak to udělat.

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

Výše uvedené dotazy můžete přizpůsobit podle svého požadavku na výpočet procenta sloupce v MySQL.

Dále můžete použít nástroj pro vytváření sestav k vykreslení dat do koláčového grafu nebo řídicího panelu. Zde je příklad výsečového grafu vytvořeného pomocí Ubiq.

Pokud chcete vytvářet grafy, dashboardy a sestavy z databáze MySQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.

  1. Příkaz ALTER TABLE byl v konfliktu s omezením CHECK v SQL Server - SQL Server / Výukový program TSQL, část 89

  2. Jak spravovat připojení db na serveru?

  3. Jak opravit „Server není nakonfigurován pro RPC“ Msg 7411 pomocí T-SQL

  4. Jak převést na velká písmena v MariaDB