Às vezes, pode ser necessário calcular a porcentagem de uma coluna (por exemplo, vendas, receita) em seus dados para entender qual porcentagem do valor total da coluna vem de cada linha (por exemplo, país, estado etc.). Como não há nenhuma função pronta para calcular esse valor, você precisa escrever uma consulta SQL para ele. Veja como calcular a porcentagem da coluna no MySQL
Como calcular a porcentagem da coluna no MySQL
Digamos que você tenha a tabela a seguir, conforme mostrado abaixo.
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 | +-------+------+
Digamos que você queira exibir uma coluna "porcentagem do total", que é simplesmente a porcentagem do total de vendas coluna, como mostrado abaixo.
+-------+------+------------------+ | rep | sale | percent of total | +-------+------+------------------+ | Bob | 15 | 25 | | Sally | 30 | 50 | | Peter | 15 | 25 | +-------+------+------------------+
Você pode fazer isso de várias maneiras usando apenas uma única consulta. Não há necessidade de escrever consultas separadas para calcular o total e a porcentagem. Vejamos cada um deles
Bônus de leitura: Como calcular a porcentagem de duas colunas no MySQL
Como calcular a porcentagem da coluna no MySQL usando CROSS JOIN
Para calcular a porcentagem de coluna no MySQL, você pode simplesmente cruzar a sum() de venda coluna com a tabela original.
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 | +-------+------+------------------+
Se você deseja adicionar uma cláusula where para filtrar seus dados, você precisa colocá-la após o CROSS JOIN, conforme mostrado abaixo. Caso contrário, você receberá um erro.
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 | +------+------+------------------+
No entanto, se você deseja adicionar a cláusula where durante a totalização da coluna, é necessário adicioná-la na cláusula select de total, conforme mostrado abaixo. Digamos que você queira excluir Bob do próprio total, então aqui está uma consulta para fazer isso.
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 | +-------+------+------------------+
Bônus de leitura: Como calcular o crescimento percentual semana a semana no MySQL
Como calcular a porcentagem da coluna no MySQL usando SUBSELECT/SUBQUERY
Você também pode calcular a porcentagem da coluna usando uma subseleção, em vez de usar um JOIN, conforme mostrado abaixo.
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 | +-------+------+------------------+
Se você deseja adicionar uma cláusula where para filtrar seus dados, você precisa colocá-la após o CROSS JOIN, conforme mostrado abaixo. Caso contrário, você receberá um erro.
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 | +--------+--------+-------------------+
No entanto, se você deseja adicionar a cláusula where durante a totalização da coluna, você precisa adicioná-la na cláusula select do total. Digamos que você queira excluir Bob do próprio total, então aqui está uma consulta para fazer isso.
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 | +-------+------+------------------+
Você pode personalizar as consultas acima conforme sua necessidade para calcular a porcentagem da coluna no MySQL.
Além disso, você pode usar uma ferramenta de relatório para plotar os dados em um gráfico de pizza ou painel. Aqui está um exemplo de um gráfico de pizza criado usando o Ubiq.
Se você deseja criar gráficos, painéis e relatórios do banco de dados MySQL, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.