将整数转换为百分比

Posted

技术标签:

【中文标题】将整数转换为百分比【英文标题】:Convert integer into percentage 【发布时间】:2014-01-28 02:51:37 【问题描述】:

我不知道如何,请帮助我。谢谢

这是查询:

SELECT 'Data' || ',' ||
       TO_CHAR(D.DTIME_DAY,'MM/dd/yyyy') || ',' ||
       NVL(o.CNT_OPENED,0) || ',' || --as cnt_opened
       NVL(c.CNT_CLOSED,0)           --as cnt_closed
  FROM OWNER_DWH.DC_DATE d
  LEFT JOIN (SELECT TRUNC(t.CREATE_TIME, 'MM') AS report_date,
                    count(*) AS cnt_opened
               FROM APP_ACCOUNT.OTRS_TICKET t
               WHERE t.CREATE_TIME BETWEEN SYSDATE -120 AND SYSDATE
               GROUP BY TRUNC(t.CREATE_TIME, 'MM')) o
    ON d.DTIME_DAY=o.REPORT_DATE
  LEFT JOIN (SELECT TRUNC(t.CLOSE_TIME, 'MM') as report_date,
                    count(*) AS cnt_closed
               FROM APP_ACCOUNT.OTRS_TICKET t
               WHERE t.CLOSE_TIME BETWEEN SYSDATE -120 AND SYSDATE
               GROUP BY TRUNC(t.CLOSE_TIME, 'MM')) c
    ON D.DTIME_DAY=c.REPORT_DATE
  WHERE d.DTIME_DAY BETWEEN SYSDATE -120 AND TRUNC(SYSDATE) -1 AND
        d.DTIME_DAY = TRUNC(d.DTIME_DAY, 'MM') AND
        TRUNC(d.DTIME_DAY,'MM')= d.DTIME_DAY
  ORDER BY D.DTIME_DAY;

该查询的输出:

 Data,10/01/2013,219,201
 Data,11/01/2013,249,234
 Data,12/01/2013,228,224
 Data,01/01/2014,269,256

我需要的示例输出是这样的:

 Data,10/01/2013,219, 52%, 201, 45%
 Data,11/01/2013,249, 75%, 234, 60%
 .......
 ........

公式:

create_time + close time = total / create_time (for cnt_opened each column) = percentage
create_time + close time = total / close_time (for cnt_closed each column) = percentage

【问题讨论】:

能否请您出示计算百分比的公式? percentage = part / whole ...所以count(*)是你的一部分? 我已经是一个公式@MaheswaranRavisankar 【参考方案1】:

试试这个:

基本上只需将 CNT_OPENED 和 CNT_CLOSED 的总和相加,然后无论您想取哪个百分比,乘以 100 再除以总和。

例如,CNT_OPENED = 219 和 CNT_CLOSED = 201,因此总数为 420。将 CNT_OPENED 乘以 100,然后除以 420 -> (219 * 100) / 420 = 52。对 CNT_CLOSED 执行相同的操作。

请注意,如果 CNT_OPENED 和 CNT_CLOSED 均为 0,这将导致异常。

SELECT 'Data'
||','||TO_CHAR(D.DTIME_DAY,'MM/dd/yyyy')
||','||NVL(o.CNT_OPENED,0) --as cnt_opened
||','||(NVL(o.CNT_OPENED,0) * 100) / (NVL(o.CNT_OPENED,0) + NVL(o.CNT_CLOSED,0)) || '%'
||','||NVL(c.CNT_CLOSED,0) --as cnt_closed
||','||(NVL(o.CNT_CLOSED,0) * 100) / (NVL(o.CNT_OPENED,0) + NVL(o.CNT_CLOSED,0)) || '%'

这也可能给你一百万个小数位,所以如果你只想把它取出来,只需使用 TRUNC 函数并指定你的精度(在这种情况下为 2 个小数位):

TRUNC((NVL(o.CNT_OPENED,0) * 100) / (NVL(o.CNT_OPENED,0) + NVL(o.CNT_CLOSED,0)), 2)

【讨论】:

记得同时包含'%' 现在,我如何在没有 cnt_opened 列的情况下获得百分比?就像,我只想得到cnt_closed?我不想显示cnt_opened? @乔尔 您仍然必须在 from 中包含数据才能获得完整计数来计算百分比,但如果您不想显示它,只需将其从 select 子句中删除即可。它将最终成为 SELECT 'Data' ||','||TO_CHAR(D.DTIME_DAY,'MM/dd/yyyy') ||','||NVL(c.CNT_CLOSED,0) --as cnt_closed | |','||(NVL(o.CNT_CLOSED,0) * 100) / (NVL(o.CNT_OPENED,0) + NVL(o.CNT_CLOSED,0)) || '%'

以上是关于将整数转换为百分比的主要内容,如果未能解决你的问题,请参考以下文章

条件格式——颜色转换的百分比

如何在pb的数据窗口中输入为整数,如15 ,然后实际数据转换为0.15。 用于百分比的。 谢谢

SQL怎么把小数转换为百分比?

小时转换成小数点

将总和转换为百分比

将像素转换为百分比