如何在 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 中创建带有百分比的总计行的主要内容,如果未能解决你的问题,请参考以下文章