La función COUNT en PostgreSQL es una de las funciones más utilizadas englobada en las denominadas funciones de agregación en bases de datos para contar el número de registros en una tabla o columna específica. Esta función permite obtener el total de filas que cumplen con una condición determinada, siendo fundamental en análisis de datos y generación de informes.
La función COUNT puede ser utilizada de diversas maneras, como contar todas las filas de una tabla o contar solo los registros no nulos de una columna. Es posible utilizarla junto con la cláusula GROUP BY para obtener recuentos por grupos específicos, lo que resulta útil en contextos como el análisis de ventas por categorías o el conteo de productos por proveedor.
En este artículo, te explicaré cómo utilizar la función COUNT en PostgreSQL para contar registros de manera efectiva y cómo aprovechar sus diferentes opciones para optimizar tus consultas. Para más información, puedes consultar la documentación oficial de PostgreSQL.
Sintaxis
La sintaxis para utilizar la función COUNT en PostgreSQL es la siguiente:
Count(*)
Usamos count(*) para contar todas las filas de una tabla, en concreto nos devolverá el número de filas que tiene la tabla incluyendo nulos y duplicados. Si usas la función count en una tabla muy grande puede que tarde mucho en ejecutarse ya que tiene que ir fila a fila, no es inmediato.
select count(*) from tabla
Count(columna)
Usamos count(columna) cuando queremos contar las filas de una columna en concreto. Destacar que este conteo no tiene en cuenta los valores nulos.
select count(columna) from tabla
Count(distinct columna)
Usamos count(distinct columna) cuando queremos contar las filas que contienen un valor distinto. Si hay dos filas con el mismo valor solo las contara una única vez (no tiene en cuenta nulos)
select count(distinct columna) from tabla
Importante
Si se utiliza count y en el select se especifican más columnas, se debe utilizar la cláusula group by para agrupar.
Ejemplos
En el siguiente ejemplo contamos las filas de la tabla empleados:
select count(*) from empleados;
En este otro ejemplo contamos las filas de la columna sueldo:
select count(sueldo) from empleados;
En este otro ejemplo contamos los sueldos, agrupados por puesto:
select puesto, count(sueldo) from empleados group by puesto;
En este otro ejemplo contamos los diferentes sueldos, agrupados por puesto:
select puesto, count(distinct sueldo) from empleados group by puesto;
Ejemplo completo
Copia y pega el siguiente código en tu consola de PostgreSQL y realiza paso a paso leyendo los comentarios:
-- www.MiguelTroyano.com -- Borramos la tabla si existe drop table if exists empleados; -- Creamos la tabla create table empleados ( id_empleado numeric(2,0), id_departamento numeric(2,0), nombre character varying(50), puesto character varying(50), sueldo integer ); -- Insertamos valores insert into empleados values (1,1,'Miguel Troyano','Analista',60000), (2,1,'Ismael Troyano','Analista',60000), (3,1,'Jose Troyano','Director',80000), (4,1,'Pilar Redondo','Directora',80000); -- Contamos las filas de la tabla empleados select count(*) from empleados; -- Contamos las filas de la columna sueldo select count(sueldo) from empleados; -- Contamos las filas de la columna sueldo -- agrupados por puesto select puesto, count(sueldo) from empleados group by puesto; -- Contamos las diferentes filas de la columna -- sueldo agrupados por puesto select puesto, count(distinct sueldo) from empleados group by puesto;