sql >> Base de Datos >  >> RDS >> Mysql

Múltiples recuentos con diferentes condiciones en una sola consulta de MySQL

Puede obtener fácilmente múltiples conteos con diferentes condiciones o criterios en una sola consulta en MySQL, usando declaraciones IF o CASE. En este artículo, veremos cómo obtener múltiples cuentas con múltiples condiciones en MySQL.


Múltiples recuentos con diferentes condiciones en una sola consulta de MySQL

Estos son los pasos para obtener múltiples conteos con diferentes condiciones en una sola consulta de MySQL.

Digamos que tiene la siguiente tabla product_sales(id, product, order_date, cantidad)

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 desea el recuento total, el recuento de pedidos del producto A y el recuento de pedidos del producto B con una cantidad> 200 en una sola consulta.

Aquí está la consulta SQL para lograr lo anterior.

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

Veamos la consulta anterior en detalle.

cuenta(*) cuenta todas las filas de la tabla para dar el recuento total.

cuenta(si(producto='A',1,null)) como A_cuenta – cuando usamos una condición IF dentro de la función de conteo, solo contará las filas donde la condición es verdadera. Nuestra condición es hacer coincidir las filas donde el producto =A. Entonces, MySQL cuenta solo aquellas filas donde el producto es A. De lo contrario, no se cuenta (se asigna como NULL).

Tenga en cuenta que es importante usar null en caso de que la condición IF falle, incluso se cuentan las filas que no coinciden.

De manera similar, calculamos el recuento de filas donde producto=B y cantidad> 200.

También puede obtener el resultado anterior utilizando la instrucción CASE como se muestra a continuación.

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

Lectura adicional:Cómo usar COALESCE en MySQL


Obtener Múltiples Conteos en Ubiq

La herramienta Ubiq Reporting admite todas las consultas SQL anteriores y facilita la visualización de los resultados SQL de diferentes maneras. También le permite crear paneles y gráficos a partir de datos de MySQL. Aquí está la consulta SQL mencionada anteriormente, en Ubiq.

¿Necesita una herramienta de informes para MySQL? Ubiq facilita la visualización de datos en minutos y el monitoreo en paneles en tiempo real. ¡Pruébalo hoy!