web-dev-qa-db-fra.com

Requête SQL avec distinct et sum

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!

12
user1768830
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).

23
Andrey

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.

4
Gordon Linoff
SELECT `color`,`fruit`,SUM(`rating`)
FROM Medleys
GROUP BY `color`,`fruit`

Exemple SQL Fiddle

1
rbedger

Ceci devrait répondre à votre question:


SELECT color, fruit, sum(rating) as [sum]
FROM medleys
GROUP BY color, fruit
ORDER BY color
 

0
ljh