如何在MySQL中按SUM()进行排序?

时间:2009-08-21 02:39:29

标签: sql mysql sql-order-by

我有一张表:“ID name c_counts f_counts”

我希望按sum(c_counts+f_counts)订购所有记录 但这不起作用:

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

5 个答案:

答案 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有正确的解决方案。