2009-08-21 10 views

Respuesta

46

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!

+0

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

+0

¡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! –

+0

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. –

7

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.

+0

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

0

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.

0

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.

+0

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. –

3

Usted podría intentar esto:

SELECT * 
FROM table 
ORDER BY (c_counts+f_counts) 
LIMIT 20