registros filas ejemplos contar condicion con sql sql-server tsql

filas - sql count group by



¿Es posible especificar la condición en Count()? (12)

¿Te refieres a esto?

SELECT Count(*) FROM YourTable WHERE Position = ''Manager''

Si es así, entonces sí que funciona!

¿Es posible especificar una condición en Count() ? Me gustaría contar solo las filas que tienen, por ejemplo, "Administrador" en la columna Posición.

Quiero hacerlo en el estado de cuenta, sin usar WHERE ; Lo pregunto porque necesito contar tanto a los Administradores como a Otros en el mismo SELECT (algo como Count(Position = Manager), Count(Position = Other)) por lo que WHERE no es útil para mí en este ejemplo.


Creo que puede usar una simple cláusula WHERE para seleccionar solo el registro de recuento.


Depende de lo que quiere decir, pero la otra interpretación del significado es donde desea contar las filas con un cierto valor, pero no desea restringir el SELECCIONAR para JUSTAR esas filas ...

Lo harías usando SUM () con una cláusula como, 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


La respuesta de @Guffa es excelente, solo señale que quizás esté más limpio con una declaración IF

select count(IF(Position = ''Manager'', 1, NULL)) as ManagerCount from ...



Sé que esto es realmente viejo, pero me gusta el truco de NULLIF para tales escenarios, y hasta ahora no he encontrado inconvenientes. Solo vea mi copia y ejemplo que se puede pegar, lo cual no es muy práctico, pero demuestra cómo usarlo.

NULLIF puede darle un pequeño impacto negativo en el rendimiento, pero creo que todavía debería ser más rápido que las subconsultas.

DECLARE @tbl TABLE ( id [int] NOT NULL, field [varchar](50) NOT NULL) INSERT INTO @tbl (id, field) SELECT 1, ''Manager'' UNION SELECT 2, ''Manager'' UNION SELECT 3, ''Customer'' UNION SELECT 4, ''Boss'' UNION SELECT 5, ''Intern'' UNION SELECT 6, ''Customer'' UNION SELECT 7, ''Customer'' UNION SELECT 8, ''Wife'' UNION SELECT 9, ''Son'' SELECT * FROM @tbl SELECT COUNT(1) AS [total] ,COUNT(1) - COUNT(NULLIF([field], ''Manager'')) AS [Managers] ,COUNT(NULLIF([field], ''Manager'')) AS [NotManagers] ,(COUNT(1) - COUNT(NULLIF([field], ''Wife''))) + (COUNT(1) - COUNT(NULLIF([field], ''Son''))) AS [Family] FROM @tbl

Comentarios apreciados :-)


Si no puede limitar la consulta con una cláusula where , puede usar el hecho de que el agregado de count solo cuenta los valores no nulos:

select count(case Position when ''Manager'' then 1 else null end) from ...

También puede utilizar la sum agregada de una manera similar:

select sum(case Position when ''Manager'' then 1 else 0 end) from ...


Simplemente agrega una cláusula WHERE y listo.


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 que tenía los valores de Gerente, Supervisor y Líder de equipo, podría obtener los conteos de cada uno de los siguientes:

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 ...


También puede utilizar la palabra clave de Pivot si está utilizando SQL 2005 o superior

Más información y de Technet

SELECT * FROM @Users PIVOT ( COUNT(Position) FOR Position IN (Manager, CEO, Employee) ) as p

Conjunto de datos de prueba

DECLARE @Users TABLE (Position VARCHAR(10)) INSERT INTO @Users (Position) VALUES(''Manager'') INSERT INTO @Users (Position) VALUES(''Manager'') INSERT INTO @Users (Position) VALUES(''Manager'') INSERT INTO @Users (Position) VALUES(''CEO'') INSERT INTO @Users (Position) VALUES(''Employee'') INSERT INTO @Users (Position) VALUES(''Employee'') INSERT INTO @Users (Position) VALUES(''Employee'') INSERT INTO @Users (Position) VALUES(''Employee'') INSERT INTO @Users (Position) VALUES(''Employee'') INSERT INTO @Users (Position) VALUES(''Employee'')


Usando esto obtendrás el conteo para los gerentes.

Select Position, count(*) as ''Position Counter'' from your_table group by Position


SELECT COUNT(*) FROM bla WHERE Position = ''Manager''