¿Es posible especificar una condición en Count()?
¿Es posible especificar una condición en Count()
? Me gustaría contar sólo las filas que tienen, por ejemplo, "Administrador" en la columna Posición.
Quiero hacerlo en la declaración de conteo, sin usar WHERE
; Lo pregunto porque necesito contar tanto a los Gerentes como a Otros en el mismo SELECT
(algo así Count(Position = Manager), Count(Position = Other))
no WHERE
me sirve en este ejemplo).
Si no puede simplemente limitar la consulta con una where
cláusula, puede utilizar el hecho de que el count
agregado solo cuenta los valores no nulos:
select count(case Position when 'Manager' then 1 else null end)
from ...
También puedes utilizar el sum
agregado de forma similar:
select sum(case Position when 'Manager' then 1 else 0 end)
from ...
Suponiendo que no desea restringir las filas que se devuelven porque también está agregando otros valores, puede hacerlo así:
select count(case when Position = 'Manager' then 1 else null end) as ManagerCount
from ...
Digamos que dentro de la misma columna tienes los valores de Gerente, Supervisor y Líder de equipo, podrías obtener los recuentos de cada uno de esta manera:
select count(case when Position = 'Manager' then 1 else null end) as ManagerCount,
count(case when Position = 'Supervisor' then 1 else null end) as SupervisorCount,
count(case when Position = 'Team Lead' then 1 else null end) as TeamLeadCount,
from ...
La respuesta de @Guffa es excelente, solo señale que tal vez sea más limpio con una declaración IF
select count(IIF(Position = 'Manager', 1, NULL)) as ManagerCount
from ...
Depende de lo que quieras decir, pero la otra interpretación del significado es cuando quieres contar filas con un valor determinado, pero no quieres restringir SELECT
SÓLO esas filas...
Lo harías usando SUM()
una cláusula en, como esta en lugar de usar COUNT()
: por ejemplo
SELECT SUM(CASE WHEN Position = 'Manager' THEN 1 ELSE 0 END) AS ManagerCount,
SUM(CASE WHEN Position = 'CEO' THEN 1 ELSE 0 END) AS CEOCount
FROM SomeTable