如何在 SQL 中创建带有百分比的总计行

Posted

技术标签:

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

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

任何人都可以协助处理 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 可能看起来像这样。

【讨论】:

以上是关于如何在 SQL 中创建带有百分比的总计行的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark/Hive 中带条件的加权运行总计

在 Pyspark/Hive 中有条件的运行总计

如何在 Grafana/InfluxDB 中创建百分比/比率列?

如何根据失败百分比在日志字段中创建警报?

在 Impala DB 中创建表作为选择百分比子查询

vbscript 此宏需要一个百分比交叉表(带有标题,在“最左边的列”处“总计”)并在新工作表上返回一个新的索引表,