Понякога може да се наложи да изчислите процента на колона (например продажби, приходи) във вашите данни, за да разберете какъв процент от общата стойност на колоната ви идва от всеки ред (например държава, държава и т.н.). Тъй като няма изготвена функция за изчисляване на тази стойност, трябва да напишете SQL заявка за нея. Ето как да изчислите процента на колоната в MySQL
Как да изчислим процента на колоната в MySQL
Да приемем, че имате следната таблица, както е показано по-долу.
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 | +-------+------+
Да приемем, че искате да покажете колона „процент от общия брой“, който е просто процентът от общата продажба колона, както е показано по-долу.
+-------+------+------------------+ | rep | sale | percent of total | +-------+------+------------------+ | Bob | 15 | 25 | | Sally | 30 | 50 | | Peter | 15 | 25 | +-------+------+------------------+
Можете да направите това по няколко начина, като използвате само една заявка. Няма нужда да пишете отделни заявки за изчисляване на общата сума и процента. Нека разгледаме всеки един от тях
Бонус за четене: Как да се изчисли процентът на две колони в MySQL
Как да се изчисли процентът на колоната в MySQL с помощта на CROSS JOIN
За да изчислите процента на колоната в MySQL, можете просто да се присъедините кръстосано към sum() наразпродажба колона с оригиналната таблица.
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 | +-------+------+------------------+
Ако искате да добавите клауза where за филтриране на вашите данни, трябва да я поставите след CROSS JOIN, както е показано по-долу. В противен случай ще получите грешка.
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 | +------+------+------------------+
Въпреки това, ако искате да добавите клауза where по време на сумиране на колона, трябва да я добавите в клаузата за избор на total, както е показано по-долу. Да речем, че искате да изключите Боб от самата обща сума, след което ето заявка за това.
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 | +-------+------+------------------+
Бонус за четене: Как да се изчисли процентът на растеж седмица през седмицата в MySQL
Как да се изчисли процентът на колоната в MySQL с помощта на SUBSELECT/SUBQUERY
Можете също да изчислите процента на колоната, като използвате подселекция, вместо да използвате JOIN, както е показано по-долу.
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 | +-------+------+------------------+
Ако искате да добавите клауза where за филтриране на вашите данни, трябва да я поставите след CROSS JOIN, както е показано по-долу. В противен случай ще получите грешка.
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 | +--------+--------+-------------------+
Въпреки това, ако искате да добавите клауза where по време на сумиране на колона, трябва да я добавите в клаузата за избор на total. Да речем, че искате да изключите Боб от самата обща сума, след което ето заявка за това.
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 | +-------+------+------------------+
Можете да персонализирате горните заявки според вашето изискване за изчисляване на процента на колоната в MySQL.
Освен това можете да използвате инструмент за отчитане, за да начертаете данните в кръгова диаграма или табло. Ето пример за кръгова диаграма, създадена с Ubiq.
Ако искате да създавате диаграми, табла за управление и отчети от MySQL база данни, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.