具有distinct和sum的SQL查询

22

我有一个名为medleys的表格,它结合了颜色水果评分

[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查询,它将组合每个唯一/不同的颜色-水果对并总结每个对的单独评分值。因此,如果您在上面的表格上运行查询,它将产生以下结果集:

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

因此,查询发现表中有两个红色-苹果对,因此它为红色-苹果对创建一个结果,并累加它们的构成部分评级(25 + 10 = 35),等等。

我确定我需要对颜色/水果值进行选择,但不确定如何在相同的“级别/范围”上汇总评级:

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

顺序不重要。colorfruit是VARCHAR(50),rating是INT。提前致谢!

4个回答

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

DISTINCT 用于选择不同的元素,仅此而已。如果你想要聚合这些元素,你需要使用 GROUP BY 和聚合函数 (SUM)。


4
你根本不需要使用`DISTINCT`,你需要使用`GROUP BY`:
select color, fruit, sum(rating)
from medleys
group by color, fruit

我回答这个问题是因为我发现这种错误经常出现。一般来说,在SQL中你完全不需要使用select distinct。你总是可以使用group by代替。在group by之后,distinct可以作为一个方便的简写。


1
如果您想知道水果的所有独特颜色,或者您桌子上有哪些独特的水果,该怎么办呢?那么您会使用 DISTINCT 吗? - rbedger
可以这么做,但重点是你也可以用GROUP BY来替换它-需要理解聚合是整体概念。 - Dan J

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

SQL Fiddle示例


0

这应该能回答你的问题:


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接