编辑Postgres 9.3

我正在处理具有以下模式的报告:http://sqlfiddle.com/#!15/fd104/2

当前查询工作正常,如下所示:



基本上是3表内部联接。我没有进行此查询,但是留下查询的开发人员想修改该查询。如您所见,TotalApplication仅基于a.agent_id计算总应用程序数。您会在结果中看到totalapplication列。我要删除的是将totalapplication更改为新的两列。我想添加一个completedsurveypartitalsurvey列。所以基本上这部分将成为

SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey
FROM forms a WHERE  a.created_at >= '2015-08-01' AND 
a.created_at <= '2015-08-31' AND disposition = 'Completed Survey'
GROUP BY a.agent_id


我刚刚添加了AND disposition = 'Completed Survey',但是我需要partialsurvey的另一列,该列具有与completedsurvey相同的查询,唯一的区别是

AND disposition = 'Partial Survey'




COUNT(a.id) as PartialSurvey


但是我不知道将该查询放在何处或查询的外观如何。最终输出包含以下列

agent_id, name, completedsurvey, partialsurvey, loginhours, applicationperhour, rph


一旦确定,那么applicationperhour和rph我可以自己修复

#1 楼

如果我对您的理解正确,那么您正在寻找经过过滤的(条件)聚合: case语句:

SELECT a.agent_id as agent_id, 
       COUNT(a.id) filter (where disposition = 'Completed Survey') as CompletedSurvey, 
       count(a.id) filter (where disposition = 'Partial Survey') as partial_survey
FROM forms a 
WHERE a.created_at >= '2015-08-01' 
  AND a.created_at <= '2015-08-31' 
GROUP BY a.agent_id;


评论


我正在使用9.3。可以吗

– jackhammer013
2015年9月1日8:11



@JoeneFloresca:不,对于9.3,您需要CASE语句。您应该始终指定要使用的版本,尤其是不是当前版本时。

– a_horse_with_no_name
2015年9月1日上午8:12

非常感谢!现在工作完美。抱歉,我编辑了我的帖子,下次再记住。谢谢 :)

– jackhammer013
2015年9月1日在8:16

感谢您的回答。真的帮了我如果我执行COUNT(处置=“完成调查”或NULL),也对我有用

–lucasarruda
19 Mar 15 '19在19:32

救我的命!大!

–寺庙
19年6月14日在1:31