首页 > 解决方案 > Oracle SQL 计算百分比

问题描述

我正在尝试根据每个科目的学生总数和年级分布来计算百分比。

我有以下字段的表:

样本数据

我写了下面的查询来获得每门课程和每个年级的总数

select distinct  Count( StudentID ) as "Total",
       COURSE,FINAL_GRADE,subject,from table
 where term in('2000200')
       and subject in ('ENG111','ENG112,'ENG121',,,,,,,,,,,,etc)
       and FINAL_GRADE IN('A','B','C','F')
 group by 1

我不能使用下面的代码,因为它将计算总总数而不是每个主题:

count(ID) * 100.0 / (select count(*) from Table) as 'Percentage'

输出应该类似于下面

需要输出

请帮忙

谢谢你

标签: sqloracle

解决方案


为此,您可以使用非常好的 Oracle 分析函数“RATIO_TO_REPORT”,如下所示。

SELECT subject, grade, COUNT(*) total,
       100 * RATIO_TO_REPORT(COUNT(*))over(PARTITION BY subject) Percentage
FROM T
GROUP BY subject, grade
ORDER BY subject, grade
;

推荐阅读