表中有“经理”列和“状态”列。如何计算除N/A外所有状态的全部记录的全部状态,以及每个经理的全部记录的分割总数?
我试图用这种方式来描绘,但什么也没有得到。
第一个查询
SELECT "Manager Name", count("Performance Score") as Perfomance FROM public.hr_dataset WHERE
("Performance Score" = 'Fully Meets') GROUP BY "Manager Name"
ORDER BY Perfomance DESC;第二次查询
SELECT "Manager Name", count("Performance Score") FROM public.hr_dataset
WHERE ("Performance Score" != 'N/A- too early to review') GROUP BY "Manager Name";需要接收两个具有名称和值的列(1个查询/2个查询)
发布于 2020-02-05 22:04:26
您可以进行条件聚合:
SELECT
"Manager Name",
COUNT(*) FILTER(WHERE "Performance Score" = 'Fully Meets') Perfomance_Fully_Meets,
COUNT(*) Performance_Not_NA,
AVG( ("Performance Score" = 'Fully Meets')::int) Performance_Ratio
FROM public.hr_dataset
WHERE "Performance Score" != 'N/A- too early to review'
GROUP BY "Manager Name"
ORDER BY Perfomance DESC;这项工作如下:
对状态(这实际上包括每个管理器的status)
'Fully Meets'的记录的条件计数,每个管理器在列Perfomance_Fully_Meets'N/A'已经过滤掉了),在Performance_Not_NA'Fully Meets'记录的比率,您可以根据条件Performance Score" = 'Perfomance_Fully_Meets的结果使用d18来完成它;在数值上下文中,真条件计算为1,false计算为1。发布于 2020-02-05 22:04:03
如果我理解得对,您可以使用FILTER根据性能分数限制已计数的行。
SELECT "Manager Name",
count(*) FILTER (WHERE "Performance Score" = 'Fully Meets')
/
count(*) FILTER (WHERE "Performance Score" <> 'N/A- too early to review')
FROM public.hr_dataset
GROUP BY "Manager Name";顺便说一句,你的专栏名字很糟糕,有很多空格和帽子之类的东西.
https://stackoverflow.com/questions/60084727
复制相似问题