在oracle统计中,常常需要统计某些字段的占比,这里记录一下。
原始数据如下:
当需要知道不同工作的职工的占比时,即统计job列各自占总数的百分比。
SELECT JOB,COUNT( * ) COUNT_JOB,
100 * round( COUNT( * ) / SUM( COUNT( * )) OVER (), 4 ) || '%' percent
FROM
EMP t
GROUP BY
JOB
即可获得如下结果:
当需要对某些特定值统计时,如工资大于2000的占比。
需要将特定值筛选出来然后与总数相除。这里就需要用到case when进行判别
SELECT (CASE
WHEN T.SAL > 2000 THEN
'工资大于2000'
WHEN T.SAL <= 2000 THEN
'工资不大于2000'
END) sal, COUNT(*), 100 * ROUND(COUNT(*) / SUM(COUNT(*)) OVER(), 4) || '%' PERCENT
FROM EMP T
GROUP BY CASE
WHEN T.SAL > 2000 THEN
'工资大于2000'
WHEN T.SAL <= 2000 THEN
'工资不大于2000'
END