【问题标题】:SQL query with distinct and sum具有 distinct 和 sum 的 SQL 查询
【发布时间】:2013-03-08 21:40:11
【问题描述】:

我有以下medleys 表,它结合了colorsfruitsratings

[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) 等。

我确定我需要选择 distinct 颜色/水果值,但不确定如何在同一“级别/范围”聚合评分:

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

顺序无关紧要。 colorfruit 是 VARCHAR(50),rating 是 INT。提前致谢!

【问题讨论】:

    标签: sql sum distinct ansi-sql


    【解决方案1】:

    这应该回答你的问题:

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

    【讨论】:

      【解决方案2】:
      SELECT `color`,`fruit`,SUM(`rating`)
      FROM Medleys
      GROUP BY `color`,`fruit`
      

      SQL Fiddle Example

      【讨论】:

        【解决方案3】:

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

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

        我正在回答,因为我看到这个错误发生了。一般来说,SQL 中根本不需要select distinct。您始终可以改用group byDistinct 应该放在group by 之后作为一种方便的简写形式。

        【讨论】:

        • 如果您想知道水果的所有独特颜色,或者您餐桌上的所有独特水果,该怎么办?那你会用DISTINCT吗?
        • 可以,但关键是您也可以将其替换为GROUP BY - 聚合是需要理解的整体概念。
        【解决方案4】:
        SELECT color, fruit, sum(rating)
        FROM medleys
        GROUP BY color, fruit
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多