Как заказать по сумме () в MySQL? - PullRequest
28 голосов
/ 21 августа 2009

У меня есть таблица: "ID name c_counts f_counts"

и я хочу заказать всю запись по sum(c_counts+f_counts) но это не работает:

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

Ответы [ 5 ]

60 голосов
/ 21 августа 2009

Не забывайте, что если вы смешиваете сгруппированные (т. Е. SUM) поля и не сгруппированные поля, вам нужно GROUP BY одно из не сгруппированных полей.

Попробуйте это:

SELECT SUM(something) AS fieldname
FROM tablename
ORDER BY fieldname

ИЛИ это:

SELECT Field1, SUM(something) AS Field2
FROM tablename
GROUP BY Field1
ORDER BY Field2

И вы всегда можете сделать производный запрос следующим образом:

SELECT
   f1, f2
FROM
    (
        SELECT SUM(x+y) as f1, foo as F2
        FROM tablename 
        GROUP BY f2
    ) as table1
ORDER BY 
    f1

Много возможностей!

8 голосов
/ 21 августа 2009

Вот как ты это делаешь

SELECT ID,NAME, (C_COUNTS+F_COUNTS) AS SUM_COUNTS 
FROM TABLE 
ORDER BY SUM_COUNTS LIMIT 20

Функция SUM сложит все строки, поэтому предложение order by бесполезно, вместо этого вам придется использовать предложение group by.

4 голосов
/ 29 августа 2012

Вы можете попробовать это:

SELECT * 
FROM table 
ORDER BY (c_counts+f_counts) 
LIMIT 20
0 голосов
/ 21 августа 2009

Проблема, которую я вижу здесь, состоит в том, что «сумма» является агрегатной функцией.

сначала нужно исправить сам запрос.

Select sum(c_counts + f_counts) total, [column to group sums by]
from table
group by [column to group sums by]

затем вы можете отсортировать его:

Select *
from (query above) a
order by total

EDIT: Но смотри пост Virat. Возможно, вам нужна не сумма ваших общих полей по группе, а просто сумма этих полей для каждой записи. В этом случае Virat имеет правильное решение.

0 голосов
/ 21 августа 2009

Без предложения GROUP BY любое суммирование сведет все строки в одну строку, поэтому ваш запрос действительно не будет работать. Если вы сгруппировали, скажем, по имени и упорядочили по сумме (c_counts + f_counts), то вы можете получить некоторые полезные результаты. Но вам нужно сгруппироваться по чему-то.

...