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

Comptes multiples avec des conditions différentes dans une seule requête MySQL

Vous pouvez facilement obtenir plusieurs décomptes avec différentes conditions ou critères dans une seule requête dans MySQL, à l'aide d'instructions IF ou CASE. Dans cet article, nous verrons comment obtenir plusieurs comptes avec plusieurs conditions dans MySQL.


Comptages multiples avec différentes conditions dans une seule requête MySQL

Voici les étapes pour obtenir plusieurs comptes avec différentes conditions dans une seule requête 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 vouliez le nombre total, le nombre de commandes de produits A et le nombre de commandes de produits B avec un montant> 200 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' and amount>200,1,null)) as B_count
        from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       1 |
+-------------+---------+---------+

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ù produit=B et montant> 200.

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

Lecture bonus :Comment utiliser COALESCE dans MySQL


Obtenir plusieurs décomptes dans Ubiq

L'outil Ubiq Reporting prend en charge toutes les requêtes SQL ci-dessus et facilite la visualisation des résultats SQL de différentes manières. Il vous permet également de créer des tableaux de bord et des graphiques à partir de données MySQL. Voici la requête SQL mentionnée ci-dessus, dans Ubiq.

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 !