编辑 赛后9.3

我正在研究一个具有以下模式的报告: http://sqlfiddle.com/#!15/fd104/2

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

enter image description here

基本上它是一个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

但我不知道在哪里把查询或查询将如何看like.So 最终输出具有以下列

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

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

有帮助吗?

解决方案

如果我正确理解你,你正在寻找一个过滤的(条件)聚合:

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.4)你需要使用 case 声明:

SELECT a.agent_id as agent_id, 
       COUNT(case when disposition = 'Completed Survey' then a.id end) as CompletedSurvey, 
       COUNT(case when disposition = 'Partial Survey' then a.id end) 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;
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top