Supongamos que tengo una tabla con una columna numérica (vamos a llamarlo "puntaje").
Me gustaría generar una tabla de conteos, que muestre cuántas veces aparecieron los puntajes en cada rango.
Por ejemplo:
rango de puntuación | numero de incidentes ------------------------------------- 0-9 | 11 10-19 | 14 20-29 | 3 ... | ...
En este ejemplo, hubo 11 filas con puntajes en el rango de 0 a 9, 14 filas con puntajes en el rango de 10 a 19 y 3 filas con puntajes en el rango de 20 a 29.
¿Hay una manera fácil de configurar esto? ¿Que recomiendas?
sql
sql-server
tsql
Hugh
fuente
fuente
Un enfoque alternativo implicaría almacenar los rangos en una tabla, en lugar de incrustarlos en la consulta. Terminarías con una tabla, llamada Rangos, que se ve así:
Y una consulta que se ve así:
Esto significa configurar una tabla, pero sería fácil de mantener cuando cambien los rangos deseados. ¡No se necesitan cambios de código!
fuente
Veo respuestas aquí que no funcionarán en la sintaxis de SQL Server. Yo usaría:
EDITAR: ver comentarios
fuente
En postgres (donde
||
está el operador de concatenación de cadenas):da:
fuente
La respuesta de James Curran fue la más concisa en mi opinión, pero el resultado no fue correcto. Para SQL Server, la declaración más simple es la siguiente:
Esto supone una tabla temporal #Scores que usé para probarla, acabo de llenar 100 filas con un número aleatorio entre 0 y 99.
fuente
fuente
fuente
Esto le permitirá no tener que especificar rangos y debe ser independiente del servidor SQL. Math FTW!
fuente
Lo haría de manera un poco diferente para que se escale sin tener que definir cada caso:
No probado, pero tienes la idea ...
fuente
fuente
Asegúrese de utilizar una palabra que no sea 'rango' si está en MySQL, o recibirá un error al ejecutar el ejemplo anterior.
fuente
Porque la columna que se está ordenando en (
Range
ordenando ) es una cadena, se usa la clasificación de cadenas / palabras en lugar de la ordenación numérica.Siempre y cuando las cadenas tengan ceros para rellenar las longitudes de los números, la clasificación debería ser semánticamente correcta:
Si el rango es mixto, simplemente rellene un cero extra:
fuente
Tratar
fuente
Tal vez estás preguntando sobre cómo mantener esas cosas ...
Por supuesto, invocará un escaneo completo de la tabla para las consultas y si la tabla que contiene los puntajes que se deben contar (agregaciones) es grande, es posible que desee una solución con mejor rendimiento, puede crear una tabla secundaria y usar reglas, como
on insert
- podrías investigarlo.¡Sin embargo, no todos los motores RDBMS tienen reglas!
fuente