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

Cómo obtener varios recuentos con una sola consulta en MySQL

En ocasiones, es posible que deba seleccionar varios recuentos en una consulta, obtener varios recuentos para diferentes condiciones o seleccionar varios recuentos con diferentes criterios. En este artículo, veremos cómo obtener varios recuentos con una sola consulta en MySQL.


Cómo obtener varios recuentos con una sola consulta en 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 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',1,null)) as B_count
        from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       2 |
+-------------+---------+---------+

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 product=B

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

¿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!