19

我有下medleys表结合了colors,fruitsratings:

[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。提前致谢!

4

4 回答 4

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

Distinct 用于选择不同的元素,仅此而已,而您想要聚合并且为此需要GROUP BY聚合函数 ( SUM)。

于 2013-03-19T23:44:11.820 回答
3

你根本不需要distinct。你需要group by

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

我正在回答,因为我看到这个错误发生了。一般来说,你根本不需要select distinctSQL。您始终可以使用 agroup by代替。 Distinct应该在后面group by作为方便的速记介绍。

于 2013-03-19T23:45:24.567 回答
1
SELECT `color`,`fruit`,SUM(`rating`)
FROM Medleys
GROUP BY `color`,`fruit`

SQL 小提琴示例

于 2013-03-19T23:46:35.860 回答
0

这应该回答你的问题:


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

于 2013-03-19T23:49:09.243 回答