如何计算oracle sql中的百分比

时间:2016-11-11 12:16:12

标签: sql oracle

我有一张表,其中我有多个ID,其值可以是0.这些ID来自不同的来源,所以我想知道ID为0的ID占百分比的百分比是多少,对于每个源文件。

示例数据:

ID  Source    
1    aaa     
0    aaa     
2    bbb     
0    ccc     
3    ccc     
0    ccc 
5    aaa 
0    bbb
6    bbb 
7    bbb

我需要显示输出,如:

CountOfIDs0   TotalIDs Source  PercentageIDs0
2               3         ccc     66.6%%
1               3         aaa     33.3%%
1               4         bbb     25%

谢谢!

4 个答案:

答案 0 :(得分:5)

如果您想要66.6%而不是66.7%的结果,您可以使用trunc()而不是round()(尽管后者可能更好)。你需要将a / b四舍五入到三位小数,所以在乘以100之后还剩下一个。

然后,您可以在一个查询中同时使用这两个计数,也可以在同一个查询中添加百分比计算。

select count(case when propkey = 0 then 1 end) countid0,
       count(propkey) totalidcount,
       source,
       to_char(round(count(case when properkey = 0 then 1 end)/count(properkey), 3)*100) 
                                                                   || '%' percentageids0
from......

答案 1 :(得分:1)

应用round功能。

 select count(id) as TotalIDs ,Source, sum(case when id=0 then 1 end) countid0,
        to_char((sum(case when id=0 then 1 end)/count(id))*100)||'%' as PercentageIDs0
     from Table1 group by Source

答案 2 :(得分:0)

我会这样做:

With MyRows AS (
  SELECT 1 ID, 'aaa' SOURCE FROM DUAL UNION ALL
  SELECT 0, 'aaa' FROM DUAL UNION ALL
  SELECT 2, 'bbb' FROM DUAL UNION ALL
  SELECT 0, 'ccc' FROM DUAL UNION ALL
  SELECT 3, 'ccc' FROM DUAL UNION ALL
  SELECT 0, 'ccc' FROM DUAL UNION ALL
  SELECT 5, 'aaa' FROM DUAL UNION ALL
  SELECT 0, 'bbb' FROM DUAL UNION ALL
  SELECT 6, 'bbb' FROM DUAL UNION ALL
  SELECT 7, 'bbb' FROM DUAL 
)
SELECT 
  DISTINCT SOURCE,
  SUM(CASE WHEN ID = 0 THEN 1 ELSE 0 END) OVER (PARTITION BY SOURCE) ZERO_IDS,
  COUNT(ID) OVER (PARTITION BY SOURCE) TOTAL_IDS,
  (100 * SUM(CASE WHEN ID = 0 THEN 1 ELSE 0 END) OVER (PARTITION BY SOURCE))/(COUNT(ID) OVER (PARTITION BY SOURCE)) PERCENTAGE
FROM MyRows
;

答案 3 :(得分:-1)

对于唯一记录,您必须使用DISTINCT查询