Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como obter várias contagens com uma única consulta no MySQL


Às vezes, pode ser necessário selecionar várias contagens em uma consulta, obter várias contagens para diferentes condições ou selecionar várias contagens com critérios diferentes. Neste artigo, veremos como obter várias contagens com uma única consulta no MySQL.



Como obter várias contagens com uma única consulta no MySQL


Digamos que você tenha a seguinte tabela product_sales(id, product, order_date, amount)
mysql> create table product_sales(
     id int,
     product varchar(10),
     order_date date,
     amount int
     );

mysql> insert into product_sales(id, product, order_date, amount)
     values(1, 'A', '2021-01-01', 250),
     (2, 'B', '2021-01-02', 200),
     (3, 'A', '2021-01-03', 150),
     (4, 'B', '2021-01-04', 250);

mysql> select * from product_sales;
+------+---------+------------+--------+
| id   | product | order_date | amount |
+------+---------+------------+--------+
|    1 | A       | 2021-01-01 |    250 |
|    2 | B       | 2021-01-02 |    200 |
|    3 | A       | 2021-01-03 |    150 |
|    4 | B       | 2021-01-04 |    250 |
+------+---------+------------+--------+

Digamos que você queira contagem total, contagem de pedidos do produto A e contagem de pedidos do produto B em uma única consulta.

Aqui está a consulta SQL para realizar o acima.
mysql> select count(*) as total_count,
        count(if(product='A',1,null)) as A_count,
        count(if(product='B',1,null)) as B_count
        from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       2 |
+-------------+---------+---------+

Vejamos a consulta acima em detalhes.

conta(*) conta todas as linhas na tabela para fornecer a contagem total.

count(if(product='A',1,null)) como A_count – quando usamos uma condição IF dentro da função count, ela contará apenas as linhas onde a condição for verdadeira. Nossa condição é combinar linhas onde produto =A. Então MySQL, conta apenas aquelas linhas onde produto é A. Caso contrário, não é contado (atribuído como NULL).

Observe que é importante usar null caso a condição IF falhe, mesmo as linhas não correspondentes são contadas.

Da mesma forma, calculamos a contagem para linhas em que produto=B

Você também pode obter o resultado acima usando a instrução CASE, conforme mostrado abaixo.
mysql> select count(*) as total_count,
 count(case when product='A' then 1 else null end) as A_count,
 count(case when product='B' then 1 else null end) as B_count
 from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       2 |
+-------------+---------+---------+

Precisa de uma ferramenta de relatório para MySQL? A Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!