J'ai une table: "ID nom c_counts f_counts"
et je veux commander tous les enregistrements par sum(c_counts+f_counts)
mais cela ne fonctionne pas:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
N'oubliez pas que si vous mélangez des champs groupés (c.-à-d. SUM) et des champs non groupés, vous devez GROUPER PAR l'un des champs non groupés.
Essaye ça:
SELECT SUM(something) AS fieldname
FROM tablename
ORDER BY fieldname
Ou ca:
SELECT Field1, SUM(something) AS Field2
FROM tablename
GROUP BY Field1
ORDER BY Field2
Et vous pouvez toujours faire une requête dérivée comme celle-ci:
SELECT
f1, f2
FROM
(
SELECT SUM(x+y) as f1, foo as F2
FROM tablename
GROUP BY f2
) as table1
ORDER BY
f1
De nombreuses possibilités!
Voilà comment vous le faites
SELECT ID,NAME, (C_COUNTS+F_COUNTS) AS SUM_COUNTS
FROM TABLE
ORDER BY SUM_COUNTS LIMIT 20
La fonction SUM additionnera toutes les lignes, donc le order by
la clause est inutile, à la place vous devrez utiliser le group by
clause.
Vous pouvez essayer ceci:
SELECT *
FROM table
ORDER BY (c_counts+f_counts)
LIMIT 20
Sans clause GROUP BY, toute sommation regroupera toutes les lignes en une seule ligne, de sorte que votre requête ne fonctionnera pas. Si vous êtes regroupé par exemple par nom et trié par somme (c_counts + f_counts), vous obtiendrez peut-être des résultats utiles. Mais il faudrait grouper par quelque chose.
Le problème que je vois ici est que la "somme" est une fonction agrégée.
vous devez d'abord corriger la requête elle-même.
Select sum(c_counts + f_counts) total, [column to group sums by]
from table
group by [column to group sums by]
ensuite, vous pouvez le trier:
Select *
from (query above) a
order by total
EDIT: Mais voir le post de Virat. Peut-être que ce que vous voulez n'est pas la somme de vos champs totaux sur un groupe, mais juste la somme de ces champs pour chaque enregistrement. Dans ce cas, Virat a la bonne solution.