Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir plusieurs comptes avec une seule requête dans MySQL

Parfois, vous devrez peut-être sélectionner plusieurs décomptes dans une requête, obtenir plusieurs décomptes pour différentes conditions ou sélectionner plusieurs décomptes avec différents critères. Dans cet article, nous verrons comment obtenir plusieurs décomptes avec une seule requête dans MySQL.


Comment obtenir plusieurs comptes avec une seule requête dans MySQL

Disons que vous avez le tableau suivant 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 |
+------+---------+------------+--------+

Supposons que vous souhaitiez le nombre total, le nombre de commandes de produits A et le nombre de commandes de produits B en une seule requête.

Voici la requête SQL pour accomplir ce qui précède.

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

Examinons la requête ci-dessus en détail.

compter(*) compte toutes les lignes du tableau pour donner le nombre total.

count(if(product=’A’,1,null)) as A_count – lorsque nous utilisons une condition IF dans la fonction count, elle ne comptera que les lignes où la condition est vraie. Notre condition est de faire correspondre les lignes où product =A. Donc MySQL ne compte que les lignes où product est A. Sinon, il n'est pas compté (assigné comme NULL).

Veuillez noter qu'il est important d'utiliser null en cas d'échec de la condition IF, sinon même les lignes non correspondantes sont comptées.

De même, nous calculons le nombre de lignes où product=B

Vous pouvez également obtenir le résultat ci-dessus en utilisant l'instruction CASE comme indiqué ci-dessous.

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

Besoin d'un outil de reporting pour MySQL ? Ubiq permet de visualiser facilement les données en quelques minutes et de les surveiller dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !