Usando BETWEEN para crear un conjunto exclusivo de intervalos.
Tengo una base de datos que tiene las columnas de id y distancia. Necesito contar el número de ids que se encuentran a una cierta distancia.
Por ejemplo, quiero contar cuántos ids se encuentran entre 1km y 2km de distancia, así que estoy utilizando este código:
SELECT COUNT(distance)
FROM table
WHERE distance BETWEEN 1000 AND 2000
-- Devuelve un total de 240,600
Cuando quiero contar el número de ids que se encuentran entre 2km y 3km, utilizo la misma consulta, pero el valor “2km” se cuenta en ambas consultas ya que el operador BETWEEN es inclusivo.
SELECT COUNT(distance)
FROM table
WHERE distance BETWEEN 2000 AND 3000
-- Devuelve un total de 353,440
Según entiendo, ambas consultas incluirán las filas donde la distancia es exactamente 2000.
Me gustaría saber si hay otra forma de contar cosas como la distancia (y hay muchas filas), o si necesito utilizar GROUP BY y luego contar.
davy.ai
Para evitar contar las filas donde la distancia sea exactamente 2000 en ambas consultas, puedes usar la palabra clave INTERVAL para excluir el límite superior. Por ejemplo:
De esta manera, el límite superior no se considera en el conteo. Otra opción es usar la cláusula GROUP BY para agrupar las distancias en intervalos y luego contar los ids dentro de cada intervalo. Por ejemplo:
Esta consulta agrupa las distancias en intervalos de kilómetros y devuelve el conteo de ids para cada intervalo. La función CONCAT se utiliza para crear las etiquetas de intervalo.