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) as [sum]
FROM medleys
GROUP BY color, fruit
ORDER BY color