【问题标题】:How do you create a totals row with percentage in SQL如何在 SQL 中创建带有百分比的总计行
【发布时间】:2016-04-12 16:07:26
【问题描述】:

我的 SQL 生成的输出类似于“图 A”下所附图像中所示的输出,但需要将其扩展为类似于“图 B”。

任何人都可以协助处理 SQL 吗?谢谢

【问题讨论】:

    标签: sql


    【解决方案1】:

    不知道您使用的是什么数据库,所以试试 Oracle。 首先,您需要创建一个新表,包括新列 PERCENT_COMPLETED

        select STATE,WIDGETS_REQUIRED,WIDGETS_COMPLETED,
               WIDGETS_COMPLETED/WIDGETS_REQUIRED*100 | '%' as PERCENT_COMPLETED
        from table;
    

    那么你需要在其中插入一个新行

       select 
          'Total' as STATE, 
          sum(WIDGETS_REQUIRED) as WIDGETS_REQUIRED, 
          sum(WIDGETS_COMPLETED) as WIDGETS_COMPLETED,
          sum(WIDGETS_COMPLETED)/sum(WIDGETS_REQUIRED)*100 | '%' as PERCENT_COMPLETED 
      into new_table
      from table;
    

    【讨论】:

    • 单竖条|是什么意思?
    • 在 Oracle 中它将连接 2 个字符串。像'a' | 'b' 将是 ab
    • 我明白了,ANSI SQL 有用于连接的双竖线,||
    【解决方案2】:

    在 MYSQL 中,我尝试了这个解决方案。 首先,插入具有 3 个值的行:STATE、WIDGETS_REQUIRED、WIDGETS_COMPLETED。您可以稍后插入这 3 个值,但现在插入它们更方便。

    insert into FIGURE_A values
    ("TOTAL", 48, 33);
    

    其次,添加一列:percent_complete

    alter table FIGURE_A
    ADD percent_complete decimal(5,2);
    

    这里你应该注意到你需要添加一个约束。见this question.

    所以,我们需要添加检查约束:

    alter table FIGURE_A    
    ADD constraint chk_range CHECK (percent_complete>=0 and percent_complete<=100);
    

    最后,我们只添加百分比值。见here。有很多方法可以计算百分比。而this question更适合你的情况,因为你需要更新,而不仅仅是计算。

    update FIGURE_A
    set percent_complete = WIDGETS_COMPLETED*100/WIDGETS_REQUIRED
    

    final result 可能看起来像这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多