Por lo general utilizamos count para contar registros de una consulta. Pero también podemos usarlos discriminando cuando contar y cuando no. El ejemplo es para Postgres pero se puede hacer de forma similar en mysql.
Esto es particularmente útil en consultas con GROUP BY donde se quieren conteos de diferentes categorías.
Un ejemplo sencillo sería: Supongamos que tenemos una tabla «MOVIMIENTOS» y queremos saber en una sola consulta cuantos movimientos fueron y cuantos fueron por el concepto igual a «DEPOSITO» usando la función COUNT:
SELECT numero_cuenta, count(*) AS "numero_movimientos", count(concepto_movimiento = 'DEPOSITO') as "numero_depositos"
FROM "MOVIMIENTOS"
GROUP BY numero_cuenta
Otro ejemplo sería:
SELECT cod_cam, nom_fue, nom_cam, pre_cam, count(cod_con) AS "contactos", count(cod_est_con='M' OR NULL) AS "matriculados"
FROM "CONTACTO" INNER JOIN "CAM"
ON "CONTACTO".cod_cam_con="CAM".cod_cam
LEFT JOIN "FUENTE"
ON "CAM".cod_fue_cam="FUENTE".cod_fue
GROUP BY cod_cam, nom_fue, nom_cam, pre_cam
Nótese que la consulta me permite tener un conteo total de todos los registros en la columna «contactos» pero ademas en la columna «matriculados» me permite simultáneamente saber cuantos de ellos cumplen la condición: tienen el campo cod_est_con con un valor igual a ‘M’. Si la condición es verdadera sumará 1 al conteo y si es falsa sumará NULL; es decir no sumará al conteo.
Otra forma de hacerlo sería con subcosultas pero esta forma sería más práctica y liviana.
Last modified: 15 septiembre, 2017