J'ai une table: "nom d'ID c_counts f_counts"Comment ORDER BY un SUM() en MySQL?
et je veux commander tout le dossier par sum(c_counts+f_counts)
mais cela ne fonctionne pas:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
J'ai une table: "nom d'ID c_counts f_counts"Comment ORDER BY un SUM() en MySQL?
et je veux commander tout le dossier par sum(c_counts+f_counts)
mais cela ne fonctionne pas:
SELECT * FROM table ORDER BY sum(c_counts+f_counts) LIMIT 20;
Don'y oublier que si Si vous mélangez des champs groupés (c'est-à-dire SUM) et des champs non groupés, vous devez GROUP BY l'un des champs non groupés.
Essayez ceci:
SELECT SUM(something) AS fieldname
FROM tablename
ORDER BY fieldname
OU ceci:
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 ceci:
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!
Voici comment vous le faites
SELECT ID,NAME, (C_COUNTS+F_COUNTS) AS SUM_COUNTS
FROM TABLE
ORDER BY SUM_COUNTS LIMIT 20
La fonction SOMME ajoutera toutes les lignes, de sorte que la clause order by
ne sert à rien, au contraire, vous devrez utiliser la clause group by
.
cela fonctionnera en effet pour trier par la somme de ces deux champs. Je lisais "sum" comme la fonction agrégée "sum", mais je pense que vous avez l'interprétation correcte ici. – user158017
Sans une clause GROUP BY, toute sommation fera rouler toutes les lignes dans une seule ligne, de sorte que votre requête ne fonctionnera en effet pas. Si vous avez groupé par, disons, nom et ordre par somme (c_counts + f_counts), alors vous pourriez obtenir des résultats utiles. Mais vous devrez regrouper par quelque chose.
Le problème que je vois ici est que "sum" est une fonction d'agrégat. D'abord, vous devez 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]
alors, vous pouvez trier:
Select *
from (query above) a
order by total
EDIT: Mais voir après par 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.
La sous-requête est inutile - il suffit d'ajouter un 'ORDER BY' à la première requête. Dans cet exemple: 'ORDER BY total' ou' ORDER BY total DESC'. Si vous avez besoin d'une "LIMIT" aussi, alors ça va après. –
Vous pouvez essayer ceci:
SELECT *
FROM table
ORDER BY (c_counts+f_counts)
LIMIT 20
oui, je veux pour tous les dossiers par la somme de certains champs. cela fonctionne: SELECT somme (c_counts + f_counts) FROM table GROUP BY nom LIMIET 20; merci! – lovespring
Vous mon ami m'a juste rendu la vie beaucoup plus facile! Je me suis battu avec une requête similaire depuis des lustres et je n'arrivais pas à bien faire les choses - vous venez de sauver mon bacon! Merci beaucoup! –
vous pouvez également sélectionner champ1, somme (champ) de l'ordre de table par 2 (où 2 signifie essentiellement le deuxième champ), il est pratique en utilisation interactive, mais je ne le recommanderais pas pour le code réel. –