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

Várias contagens com condições diferentes em uma única consulta MySQL


Você pode facilmente obter várias contagens com diferentes condições ou critérios em uma única consulta no MySQL, usando instruções IF ou CASE. Neste artigo, veremos como obter várias contagens com várias condições no MySQL.



Várias contagens com diferentes condições em uma única consulta MySQL


Aqui estão as etapas para obter várias contagens com diferentes condições em uma única consulta 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 com valor> 200 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' and amount>200,1,null)) as B_count
        from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       1 |
+-------------+---------+---------+

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 e quantidade> 200.

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' and amount>200 then 1 else null end) as B_count
 from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       1 |
+-------------+---------+---------+

Bônus de leitura:Como usar COALESCE no MySQL



Obtenha várias contagens no Ubiq


A ferramenta Ubiq Reporting suporta todas as consultas SQL acima e facilita a visualização dos resultados SQL de diferentes maneiras. Ele também permite que você crie painéis e gráficos a partir de dados MySQL. Aqui está a consulta SQL mencionada acima, no Ubiq.

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