¿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 la declaración de conteo, no usando WHERE
; Lo pregunto porque necesito contar tanto a los gerentes como a los demás en el mismo SELECT
(algo Count(Position = Manager), Count(Position = Other))
así WHERE
no me sirve en este ejemplo.
sql
sql-server
tsql
agnieszka
fuente
fuente
SELECT *
, peroSELECT COUNT(*)
, que es una bestia totalmente diferente.Respuestas:
Si no puede limitar la consulta en sí con una
where
cláusula, puede utilizar el hecho de que elcount
agregado solo cuenta los valores no nulos:También puede usar el
sum
agregado de una manera similar:fuente
null
es especial. Usocase when IntegerField is null then ...
SUM(CONVERT(int, IsManager))
else null
forcase
, por lo que elcount()
ejemplo puede ser 10 caracteres más corto (si cuenta el espacio).Suponiendo que no desea restringir las filas que se devuelven porque también está agregando otros valores, puede hacerlo así:
Digamos que dentro de la misma columna que tenía valores de Gerente, Supervisor y Líder de equipo, podría obtener los recuentos de cada uno de esta manera:
fuente
else
parte, soloend
después de la1
.else
ya que documenta mejor los resultados de la declaración del caso, especialmente para los desarrolladores de SQL novatos. Por brevedad, se puede eliminar en este caso.La respuesta de @Guffa es excelente, solo señale que tal vez sea más limpio con una declaración IF
fuente
Depende de lo que quiera decir, pero la otra interpretación del significado es donde desea contar las filas con un cierto valor, pero no desea restringirlas
SELECT
a SOLO esas filas ...Lo harías usando
SUM()
una cláusula, como esta en lugar de usarCOUNT()
: ej.fuente
También puede usar la palabra clave dinámica si está utilizando SQL 2005 o superior
Más información y de Technet
Conjunto de datos de prueba
fuente
¿Te refieres a esto?
Si es así, ¡sí, eso funciona!
fuente
Sé que esto es muy antiguo, pero me gusta el
NULLIF
truco para tales escenarios, y hasta ahora no encontré inconvenientes. Solo vea mi ejemplo de copiar y pegar, que no es muy práctico, pero demuestra cómo usarlo.NULLIF
podría darle un pequeño impacto negativo en el rendimiento, pero supongo que aún debería ser más rápido que las subconsultas.Comentarios apreciados :-)
fuente
fuente
Creo que puede usar una simple cláusula WHERE para seleccionar solo el recuento de algunos registros.
fuente
Esto es lo que hice para obtener un conjunto de datos que incluía tanto el total como el número que cumplía los criterios, dentro de cada contenedor de envío. Eso me permite responder la pregunta "¿Cuántos contenedores de envío tienen más del X% de artículos de más del tamaño 51"?
fuente
Tenga en cuenta que con PrestoDB SQL (de Facebook), hay un acceso directo:
https://prestodb.io/docs/current/functions/aggregate.html
fuente
Con esto obtendrás el recuento de gerentes
fuente