【问题标题】:SQL query with sum and unique output具有总和和唯一输出的 SQL 查询
【发布时间】:2015-10-30 19:19:19
【问题描述】:

让我从这里的表中查询:SQL query with distinct and sum

此表,稍作修改:

medley_id   | class    |  color   |   fruit   |   rating
========================================================
1             sweet       red         apple       25
2             sour        blue        pear        5
3             sweet       green       apple       12
4             sour        red         apple       10
5             sour        purple      kiwi        5
6             sweet       purple      kiwi        50
7             sour        blue        kiwi        3
8             sour        blue        pear        9

我想要一个产生这个结果的查询:

class       |   color   |   fruit   |   sum
============================================
(multiple)      red         apple       35
sour            blue        pear        14
sour            blue        kiwi        3
sweet           green       apple       12
(multiple)      purple      kiwi        55

(multiple) 不必告诉我倍数是什么,它只需要知道它是倍数,但这并不是使行在总和方面唯一的东西。

这有意义吗?任何人都可以帮忙吗?谢谢!

【问题讨论】:

    标签: sql sql-server sum unique


    【解决方案1】:

    我认为这可能会做到:

    SELECT
      CASE
        WHEN COUNT(DISTINCT class) > 1 THEN '(multiple)'
        ELSE MAX(class)
      END AS class
    , color
    , fruit
    , SUM(rating) AS sum
    FROM MyTable
    GROUP BY color,fruit
    

    未经测试,但应该可以将这个想法转化为可行的解决方案。

    【讨论】:

      【解决方案2】:

      不使用GROUP BY,只使用窗口函数:

      SELECT DISTINCT
      [class] = CASE WHEN 
                   DENSE_RANK() OVER (PARTITION BY color, fruit ORDER BY class) 
                  +DENSE_RANK() OVER (PARTITION BY color, fruit ORDER BY class DESC) - 1 > 1
                    THEN '(multiple)'
                    ELSE class
                 END
        ,color
        ,fruit
        ,[sum]=  SUM(rating) OVER (PARTITION BY color, fruit)   
      FROM #medleys
      

      LiveDemo

      输出:

      ╔════════════╦════════╦═══════╦═════╗
      ║   class    ║ color  ║ fruit ║ sum ║
      ╠════════════╬════════╬═══════╬═════╣
      ║ (multiple) ║ purple ║ kiwi  ║  55 ║
      ║ (multiple) ║ red    ║ apple ║  35 ║
      ║ sour       ║ blue   ║ kiwi  ║   3 ║
      ║ sour       ║ blue   ║ pear  ║  14 ║
      ║ sweet      ║ green  ║ apple ║  12 ║
      ╚════════════╩════════╩═══════╩═════╝
      

      【讨论】:

      • 嗨,小伙子,感谢您的解决方案!它也可以(我碰巧使用的是 oracle sql)。你会说你的解决方案比前面的解决方案更有效吗?
      • @AlexBudovski 你好,我使用在线格式化程序sensefulsolutions.com/2010/10/format-text-as-table.html
      • @MicroClue 比较两个查询之间的执行计划
      猜你喜欢
      • 2021-03-05
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2017-11-21
      • 2021-06-29
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多