postgresql PSQL -返回交叉表中列的已完成和未完成百分比

ds97pgxw  于 2023-03-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(101)

这是我的“完成”表
| 姓名|地位|部门|
| - ------|- ------|- ------|
| 约翰|已完成|销售额|
| 戴夫|已完成|人力资源|
| 占|未完成|销售额|
| 法兰克|未完成|人力资源|
| 莎拉|已完成|技术|
我希望返回一个按部门的交叉表查询,该查询按部门计算已完成和未完成的百分比,如下所示
| 现况|人力资源|销售额|技术|
| - ------|- ------|- ------|- ------|
| 已完成|50%|50%|百分之百|
| 未完成|50%|50%|0%|
我是如何努力返回每个部门的已完成和未完成的百分比计算的
这是我目前编写的查询

select * from crosstab($$
    SELECT status, department, count(distinct status) * 100.0 / sum(count(*)) over() 
    FROM completions
    GROUP BY status, department
    ORDER BY status
    $$,
    $$select distinct department FROM completions ORDER BY department
    $$
    ) as ("Status" varchar, "HR" varchar, "Sales" varchar, "Tech" varchar)

我不能完全理解百分比的计算
这里还有一个fiddle

91zkwejq

91zkwejq1#

这是我选择的solution,但如果有更好的替代品,我会很感兴趣
更重要的是

Round((count(*)/sum(count(status)) over(partition by department)) * 100)

它得到(columnCount / total) * 100表示的百分比

相关问题