У меня есть таблица: "ID name c_counts f_counts"
и я хочу упорядочить всю запись по sum(c_counts+f_counts)
, но это не работает:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
У меня есть таблица: "ID name c_counts f_counts"
и я хочу упорядочить всю запись по sum(c_counts+f_counts)
, но это не работает:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
Не забывайте, что если вы смешиваете сгруппированные (например, СУММ) поля и несгруппированные поля, вам необходимо СГРУППИРОВАТЬ ПО одному из несгруппированных полей.
Попробуй это:
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
Много возможностей!
Вот как ты это делаешь
SELECT ID,NAME, (C_COUNTS+F_COUNTS) AS SUM_COUNTS
FROM TABLE
ORDER BY SUM_COUNTS LIMIT 20
Функция SUM суммирует все строки, поэтому предложение order by
бесполезно, вместо этого вам придется использовать предложение group by
.
Вы можете попробовать это:
SELECT *
FROM table
ORDER BY (c_counts+f_counts)
LIMIT 20
getBy(order)
, которая вызывает SQL, мы можем сделать что-то вроде этого: getBy("(c_counts+f_counts)")
- person Stéphane Bruckert; 01.03.2021
Без предложения GROUP BY любое суммирование сведет все строки в одну строку, поэтому ваш запрос действительно не будет работать. Если вы сгруппировали, скажем, по имени и упорядочили по сумме (c_counts+f_counts), вы можете получить некоторые полезные результаты. Но вам придется сгруппировать по чему-то.
Проблема, которую я вижу здесь, заключается в том, что «сумма» является агрегатной функцией.
во-первых, вам нужно исправить сам запрос.
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
РЕДАКТИРОВАТЬ: Но см. сообщение Вирата. Возможно, вам нужна не сумма ваших общих полей по группе, а просто сумма этих полей для каждой записи. В этом случае у Вирата есть правильное решение.
ORDER BY
к первому запросу. В этом примере: ORDER BY total
или ORDER BY total DESC
. Если вам нужен еще и LIMIT
, то он идет потом.
- person Rick James; 30.04.2017