Tengo una tabla: "ID Nombre de c_counts f_counts"¿CÓMO HACER PEDIDO POR SUM?() En MySQL?
y quiero ordenar todos los records por sum(c_counts+f_counts)
pero esto no funciona:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
Tengo una tabla: "ID Nombre de c_counts f_counts"¿CÓMO HACER PEDIDO POR SUM?() En MySQL?
y quiero ordenar todos los records por sum(c_counts+f_counts)
pero esto no funciona:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
Don'y hay que olvidar que si Si está mezclando campos agrupados (es decir, SUM) y campos no agrupados, debe agrupar en uno de los campos no agrupados.
Prueba esto:
SELECT SUM(something) AS fieldname
FROM tablename
ORDER BY fieldname
O esto:
SELECT Field1, SUM(something) AS Field2
FROM tablename
GROUP BY Field1
ORDER BY Field2
Y siempre se puede hacer una consulta derivada de esta manera:
SELECT
f1, f2
FROM
(
SELECT SUM(x+y) as f1, foo as F2
FROM tablename
GROUP BY f2
) as table1
ORDER BY
f1
Muchas posibilidades!
Esta es la forma de hacerlo
SELECT ID,NAME, (C_COUNTS+F_COUNTS) AS SUM_COUNTS
FROM TABLE
ORDER BY SUM_COUNTS LIMIT 20
La función SUMA se suman todas las filas, por lo que la cláusula de order by
no sirve para nada, en cambio, tendrá que utilizar la cláusula group by
.
esto funcionará para ordenar por la suma de esos dos campos. Estaba leyendo "suma" como la función agregada "suma", pero creo que tiene la interpretación correcta aquí. – user158017
Sin una cláusula GROUP BY, cualquier sumatoria enrollará todas las filas en una sola fila, por lo que su consulta no funcionará. Si agrupadas por, digamos, nombre, y ordenados por suma (c_counts + f_counts), entonces puede obtener algunos resultados útiles. Pero tendrías que agrupar por algo.
El problema que veo aquí es que "suma" es una función agregada.
primero, debe corregir la consulta.
Select sum(c_counts + f_counts) total, [column to group sums by]
from table
group by [column to group sums by]
continuación, puede ordenar que:
Select *
from (query above) a
order by total
EDIT: Pero ver post por Virat. Quizás lo que desea no es la suma de sus campos totales sobre un grupo, sino solo la suma de esos campos para cada registro. En ese caso, Virat tiene la solución correcta.
La subconsulta no es necesaria; simplemente agregue un 'ORDER BY' a la primera consulta. En ese ejemplo: 'ORDER BY total' o' ORDER BY total DESC'. Si necesita un 'LIMIT' también, luego lo hace. –
Usted podría intentar esto:
SELECT *
FROM table
ORDER BY (c_counts+f_counts)
LIMIT 20
sí, quiero para todos los registros por la suma de algunos campos. esto funciona: SELECT sum (c_counts + f_counts) FROM table GROUP BY nombre LIMIET 20; ¡gracias! – lovespring
¡Mi amigo acaba de hacer mi vida muchísimo más fácil! He estado luchando con una consulta similar por años y no pude hacerlo bien, ¡acabas de salvar mi tocino! ¡Muchas gracias! –
también puede SELECCIONAR campo1, suma (campo) de orden de tabla por 2 (donde 2 significa básicamente el segundo campo), es conveniente en uso interactivo, pero no lo recomendaría para código real. –