SQL-запрос с разной суммой

У меня есть следующая таблица 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) и т.д.

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

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

Заказ не имеет значения. color и fruit - VARCHAR (50) s, а rating - INT. Спасибо заранее!

Ответ 1

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

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

Ответ 2

Вам не нужно distinct вообще. Вам нужно group by:

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

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

Ответ 4

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


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