Sql 如何将两个条件不同的查询相互划分?
有一个表,其中包含managers列和status列。如何计算每个经理除N/A之外的所有状态的完整、分割的记录总数 我试图用这种方式来描绘,但没有任何结果 第一个问题Sql 如何将两个条件不同的查询相互划分?,sql,postgresql,group-by,pivot,Sql,Postgresql,Group By,Pivot,有一个表,其中包含managers列和status列。如何计算每个经理除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
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个查询)如果我理解正确,您可以使用
过滤器
根据性能分数限制计数的行
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";
选择“经理姓名”,
计数(*)过滤器(其中“性能分数”=“完全满足”)
/
计数(*)过滤器(其中“绩效分数”为“不适用-审查太早”)
来自public.hr\u数据集
按“经理姓名”分组;
顺便说一句,你有糟糕的列名,有所有的空格、大写等等…如果我理解正确,你可以使用
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";
选择“经理姓名”,
计数(*)过滤器(其中“性能分数”=“完全满足”)
/
计数(*)过滤器(其中“绩效分数”为“不适用-审查太早”)
来自public.hr\u数据集
按“经理姓名”分组;
顺便说一句,你有糟糕的列名,有所有的空格、大写等等…你可以做条件聚合:
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;
这项工作如下:
- 过滤除
以外的状态(这实际上包括'N/A'
状态)'Fully Meets'
- 按经理姓名汇总
- 对于每个管理器,对状态为“完全满足”的记录的数量进行有条件计数,并在列
performance\u Fully\u Meets
- 对于每个经理,在列
性能\u Not \u NA
- 如果您想要“完全满足”的比率记录,可以使用条件
”的结果上的性能分数“=“Performance\u Fully\u Meets
;在数字上下文中,真实条件的计算结果为AVG()
,假为1
0
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;
这项工作如下:
- 过滤除
以外的状态(这实际上包括'N/A'
状态)'Fully Meets'
- 按经理姓名汇总
- 对于每个管理器,对状态为“完全满足”的记录的数量进行有条件计数,并在列
performance\u Fully\u Meets
- 对于每个经理,在列
性能\u Not \u NA
- 如果您想要“完全符合”记录的比率,您可以使用条件的结果“性能分数”=“性能完全符合”,使用
;在数值上下文中,真条件的计算结果为AVG()
,假条件的计算结果为1
0
WHERE
子句过滤掉;然后,对计数进行评估。你能给我一些建议吗,我在哪里可以找到更多关于这个结构的信息?平均值((“性能分数”=“完全满足”)::int)@Bimka09:condition“性能分数”=“完全满足”
在整数上下文中进行评估:true为1
,false为0
。求平均值可以得到满足记录组条件的记录比率。非常感谢您的时间和决定!但请您澄清一下,为什么绩效栏中的“N/A”被过滤掉了。当我们在何处写入条件时,它们是否被过滤?那么性能比列的过滤方式是否相同?@Bimka09:是的<代码>'N/A's由WHERE
子句过滤掉;然后,对计数进行评估。你能给我一些建议吗,我在哪里可以找到更多关于这个结构的信息?平均值((“性能分数”=“完全满足”)::int)@Bimka09:condition“性能分数”=“完全满足”
在整数上下文中进行评估:true为1
,false为0
。求平均值可以得到满足记录组中条件的记录比率。。