moda - MySQL y CASE CUANDO con un rango de valores
sql mean function (2)
Necesita una sub-consulta. Si esta es una vista necesitas usar dos vistas entonces.
SELECT s.ct, s.grp FROM (
SELECT count(*) as ct,
CASE
WHEN COUNT(*) < 25 THEN ''1-25''
WHEN COUNT(*) >= 25 AND COUNT(*) < 50 THEN ''25-50''
WHEN COUNT(*) >= 50 AND COUNT(*) < 100 THEN ''50-100''
WHEN COUNT(*) >= 100 AND COUNT(*) < 250 THEN ''100-250''
WHEN COUNT(*) >= 250 AND COUNT(*) < 500 THEN ''250-500''
WHEN COUNT(*) >= 500 AND COUNT(*) < 1000 THEN ''500-1000''
ELSE ''1000+''
END AS grp
FROM records r,accounts a
WHERE r.account_id=a.id) as s
Group BY s.grp;
Tengo una tabla de cuentas y una tabla de registros donde las cuentas tienen varios registros. Me gustaría desglosar los totales de la cuenta por rango de "conteo de registros". Es decir, mostrar el desglose de
Count of Records | Count
=========================
0-25 | 100
25 - 50 | 122
50 - 100 | 300
Etc.
Estoy usando la siguiente consulta, pero no puedo agruparla por "grp", que es lo que quiero. ¿Alguna ayuda sobre la mejor manera de modificar la consulta?
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
ORDER BY ct
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(*)
Debe "definir" los "grupos" en los que desea agregar las filas de datos originales en ... Esto es lo que significa la cláusula Agrupar por ... Define los criterios según los cuales se analizará cada fila de las tablas base para determine en qué "grupo" se agregarán los datos en ... La expresión o expresiones definidas en el grupo por cláusula son las "definiciones" para esos grupos.
A medida que la consulta procesa las filas de datos originales, cualquier fila para la cual los valores de esta (s) expresión (s) son iguales a un grupo existente se agrega a ese grupo ... Cualquier fila nueva con un valor no representado por un existente cubo hace que se cree un nuevo cubo ...