En MariaDB, el COUNT()
La función agregada devuelve un recuento del número de valores no NULL de una expresión en las filas recuperadas por SELECT
declaración.
Datos de muestra
Supongamos que tenemos la siguiente tabla:
SELECT *
FROM Pets;
Resultado:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Los siguientes ejemplos usarán el COUNT()
función al consultar esta tabla.
Ejemplo
Así es como se cuentan las filas en la tabla anterior:
SELECT COUNT(*)
FROM Pets;
Resultado:
8
Esto nos dice que hay 8 filas en la tabla. Lo sabemos porque usamos el comodín asterisco (*
) para especificar todas las filas y todas las columnas.
Contar una columna específica
También puede especificar una columna para contar. El COUNT()
la función solo cuenta no NULL
resultados, por lo que si especifica una columna que contiene NULL
valores, esos valores no se contarán.
Aquí hay un ejemplo para demostrar lo que quiero decir.
SELECT COUNT(DOB)
FROM Pets;
Resultado:
6
En este caso, las Pets
la tabla contiene dos NULL
valores en el DOB
columna (dos mascotas no han proporcionado su fecha de nacimiento), por lo que COUNT(DOB)
devuelve 6, en lugar de 8 cuando usamos COUNT(*)
.
El motivo COUNT(*)
en el ejemplo anterior devolvió todas las filas, es porque esas dos filas lo hicieron tener datos en las otras columnas.
Resultados filtrados
El COUNT()
La función cuenta las filas devueltas por la consulta. Entonces, si filtra los resultados, el resultado de COUNT()
reflejará eso.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Resultado:
2
En este caso, hay dos mascotas con el nombre de Fluffy. Por lo tanto, la consulta habría devuelto dos filas y el resultado de COUNT()
es 2
.
Contar columnas distintas
Tenemos la opción de agregar el DISTINCT
palabra clave para especificar que solo se devuelvan valores distintos (de modo que excluya los duplicados):
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Resultado:
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
En este caso, aunque hay ocho PetName
valores, solo siete de ellos son distintos (dos son duplicados; tenemos dos mascotas llamadas Fluffy).
El HAVING
Cláusula
Puede incluir COUNT()
en varias partes de una consulta. No se limita solo a SELECT
lista.
Aquí hay un ejemplo que usa COUNT()
tanto en HAVING
cláusula y el SELECT
lista:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
Resultado:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
Ver SQL COUNT()
para principiantes para obtener una explicación más detallada de este ejemplo, así como un ejemplo del uso de COUNT()
en una función de ventana.