テーブルがあります:「ID名c_counts f_counts」
すべてのレコードをsum(c_counts+f_counts)
で並べたいのですが、これは機能しません:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
グループ化された(つまり、SUM)フィールドと非グループ化フィールドを混在させる場合、非グループ化フィールドの1つをグループ化する必要があることを忘れないでください。
これを試して:
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
GROUP BY句がないと、すべての合計がすべての行を1つの行にロールアップするため、クエリは実際には機能しません。たとえば、名前でグループ化し、sum(c_counts + f_counts)で順序付けした場合、いくつかの有用な結果が得られる可能性があります。ただし、何かでグループ化する必要があります。
ここで見た問題は、「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には適切なソリューションがあります。