SQL-запрос с distinct и sum

у меня есть следующие medleys таблица, которая сочетает в себе colors, fruits и 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

я пытаюсь написать ANSI-совместимый SQL-запрос, который объединит все уникальные / отличные color-fruit пара и сумма индивидуальной каждой пары rating значения. Таким образом, если вы запустите запрос в таблице выше, он приведет к следующим наборам результатов:

[query]
color   |   fruit   |   sum
===========================
red         apple       35
blue        pear        14
blue        kiwi        3
green       apple       12
purple      kiwi        55

таким образом, запрос видит, что есть два red-apple пар в таблице, и поэтому он создает один результат для red-apple пара, и складывает их учредительных ratings (25 + 10 = 35), etc.

я уверен, что мне нужно выбрать для distinct цвет / фруктовые значения, но не уверен, как агрегировать рейтинги на том же"уровне/области":

SELECT
    distinct(color, fruit), sum(rating)
FROM
    medleys

порядок не имеет значения. color и fruit являются VARCHAR (50) s и rating is INT. Заранее спасибо!

4 ответов


SELECT color, fruit, sum(rating)
FROM medleys
GROUP BY color, fruit

Distinct используется для выбора отдельных элементов, не более того, в то время как вы хотите агрегировать и для этого вам нужно GROUP BY и агрегирования функций (SUM).


Не нужно distinct на всех. Вам нужно group by:

select color, fruit, sum(rating)
from medleys
group by color, fruit

я отвечаю, потому что я вижу, что эта ошибка происходит. В общем, вам не нужно select distinct вообще в SQL. Вы всегда можете использовать group by вместо. Distinct должно быть введено после group by как удобная короткая рука.


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

пример скрипки SQL


Это должно ответить на ваш вопрос:


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