【问题标题】:Rollup - Oracle db sql汇总 - Oracle 数据库 sql
【发布时间】:2020-07-13 22:57:23
【问题描述】:

我有下表

我想汇总和汇总要在下面的屏幕截图中显示的数据。

我该怎么做,是否有可能以这种方式准确汇总?

【问题讨论】:

    标签: sql oracle group-by oracle11g


    【解决方案1】:

    我会使用grouping sets:

    select fruit, type, sum(amount), sum(percent)
    from t
    group by grouping sets ( (fruit, type), (fruit) );
    

    【讨论】:

      【解决方案2】:

      您可以使用ROLLUP,然后使用必要条件来省略额外生成的行,如下所示:

      SQL> -- Sample data
      SQL> WITH DATAA (FRUIT, TYPE, AMOUNT, PERCENT) AS
        2  (
        3  SELECT 'Apple', 'Green', 10017, 17 FROM DUAL UNION ALL
        4  SELECT 'Orange', 'Green', 10016, 16 FROM DUAL UNION ALL
        5  SELECT 'Papaya', 'Yellow', 10014, 14 FROM DUAL UNION ALL
        6  SELECT 'Papaya', 'Blue', 10005, 5 FROM DUAL UNION ALL
        7  SELECT 'Papaya', 'Green', 10012, 12 FROM DUAL
        8  )
        9  -- Your query starts from here
       10  SELECT *
       11  FROM (
       12          SELECT FRUIT, TYPE, AMOUNT, SUM(PERCENT) AS PERCENT
       13            FROM DATAA
       14          GROUP BY ROLLUP(FRUIT, TYPE, AMOUNT)
       15       )
       16  WHERE ( FRUIT IS NOT NULL AND TYPE IS NOT NULL AND AMOUNT IS NOT NULL )
       17      OR ( FRUIT IS NOT NULL AND TYPE IS NULL AND AMOUNT IS NULL )
       18  ORDER BY FRUIT, TYPE DESC NULLS LAST;
      
      FRUIT  TYPE       AMOUNT    PERCENT
      ------ ------ ---------- ----------
      Apple  Green       10017         17
      Apple                            17
      Orange Green       10016         16
      Orange                           16
      Papaya Yellow      10014         14
      Papaya Green       10012         12
      Papaya Blue        10005          5
      Papaya                           31
      
      8 rows selected.
      
      SQL>
      

      【讨论】:

        猜你喜欢
        • 2014-10-05
        • 2010-11-16
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多