sql >> Base de Datos >  >> RDS >> Mysql

MySQL y CASE WHEN con un rango de valores

prueba esto:

SELECT count(*) as ct, 
CASE  
    WHEN COUNT(*) < 25 THEN '1-25' 
    WHEN COUNT(*) >= 25 < 50 THEN '25-50' 
    WHEN COUNT(*) >= 50 < 100 THEN '50-100' 
    WHEN COUNT(*) >= 100 < 250 THEN '100-250' 
    WHEN COUNT(*) >= 250 < 500 THEN '250-500' 
    WHEN COUNT(*) >= 500 < 1000 THEN '500-1000' 
    ELSE '1000+' 
END AS grp 
FROM records r, accounts a 
WHERE r.account_id=a.id 
GROUP BY r.account_id, a.id, 
    CASE  
    WHEN COUNT(*) < 25 THEN '1-25' 
    WHEN COUNT(*) >= 25 < 50 THEN '25-50' 
    WHEN COUNT(*) >= 50 < 100 THEN '50-100' 
    WHEN COUNT(*) >= 100 < 250 THEN '100-250' 
    WHEN COUNT(*) >= 250 < 500 THEN '250-500' 
    WHEN COUNT(*) >= 500 < 1000 THEN '500-1000' 
    ELSE '1000+' END
ORDER BY count(*)

Tiene que "definir" los "cubos" en los que desea agregar las filas de datos originales... Para esto está la cláusula Group By... Define los criterios por los cuales se analizará cada fila en las tablas base para determinar en qué "cubo" se agregarán sus datos... La expresión o expresiones definidas en la cláusula group by son las "definiciones" para esos cubos.

A medida que la consulta procesa las filas de datos originales, cualquier fila para la que los valores de esta expresión sean los mismos que los de un depósito existente se agrega a ese depósito... Cualquier fila nueva con un valor no representado por un depósito existente cubo hace que se cree un nuevo cubo...