J'ai la table medleys
suivante qui combine colors
, fruits
et ratings
:
[medleys]
medley_id | color | fruit | rating
==============================================
1 red Apple 25
2 blue pear 5
3 green Apple 12
4 red Apple 10
5 purple kiwi 5
6 purple kiwi 50
7 blue kiwi 3
8 blue pear 9
J'essaie d'écrire une requête SQL conforme à la norme ANSI qui combine chaque paire unique/distincte color
-fruit
et additionne les valeurs individuelles rating
de chaque paire. Ainsi, si vous exécutiez la requête sur la table ci-dessus, les ensembles de résultats suivants seraient générés:
[query]
color | fruit | sum
===========================
red Apple 35
blue pear 14
blue kiwi 3
green Apple 12
purple kiwi 55
Ainsi, la requête voit qu'il y a deux paires red
-Apple
dans la table et crée ainsi un résultat pour la paire red
-Apple
et additionne leur composante ratings
(25 + 10 = 35), etc.
Je suis sûr que je dois faire une sélection pour distinct color/fruit, mais je ne sais pas comment agréger les évaluations au même "niveau/champ":
SELECT
distinct(color, fruit), sum(rating)
FROM
medleys
L'ordre n'a pas d'importance. color
et fruit
sont VARCHAR (50) s et rating
est INT. Merci d'avance!
SELECT color, fruit, sum(rating)
FROM medleys
GROUP BY color, fruit
Distinct est utilisé pour sélectionner des éléments distincts, rien de plus, pendant que vous voulez agréger et pour cela vous avez besoin de GROUP BY
et de fonctions d'agrégation (SUM
).
Vous n'avez pas besoin de distinct
du tout. Vous avez besoin de group by
:
select color, fruit, sum(rating)
from medleys
group by color, fruit
Je réponds parce que je vois cette erreur se produire. En général, vous n'avez pas du tout besoin de select distinct
en SQL. Vous pouvez toujours utiliser un group by
à la place. Distinct
devrait être introduit après group by
comme un raccourci pratique.
SELECT `color`,`fruit`,SUM(`rating`)
FROM Medleys
GROUP BY `color`,`fruit`
Ceci devrait répondre à votre question:
SELECT color, fruit, sum(rating) as [sum]
FROM medleys
GROUP BY color, fruit
ORDER BY color