我有一张表:“ID name c_counts f_counts”
我希望按sum(c_counts+f_counts)
订购所有记录
但这不起作用:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
答案 0 :(得分:59)
不要忘记,如果要混合分组(即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
很多可能性!
答案 1 :(得分:8)
你就是这样做的
SELECT ID,NAME, (C_COUNTS+F_COUNTS) AS SUM_COUNTS
FROM TABLE
ORDER BY SUM_COUNTS LIMIT 20
SUM函数会将所有行相加,因此order by
子句无用,相反,您必须使用group by
子句。
答案 2 :(得分:4)
你可以试试这个:
SELECT *
FROM table
ORDER BY (c_counts+f_counts)
LIMIT 20
答案 3 :(得分:0)
如果没有GROUP BY子句,任何求和都会将所有行汇总到一行,因此您的查询确实不起作用。如果按名称分组,并按sum(c_counts + f_counts)排序,则可能会得到一些有用的结果。但你必须分组。
答案 4 :(得分:0)
我在这里看到的问题是“sum”是一个聚合函数。
首先,您需要修复查询本身。
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
编辑: 但是请看Virat的帖子。也许您想要的不是组中总字段的总和,而只是每条记录的字段总和。在这种情况下,Virat有正确的解决方案。