Postgres在同一查询上具有不同条件的计数
-
29-09-2020 - |
题
编辑 赛后9.3
我正在研究一个具有以下模式的报告: http://sqlfiddle.com/#!15/fd104/2
当前查询工作正常,如下所示:
基本上它是一个3表内连接。我没有做这个查询,但离开它的开发人员,我想修改查询。正如你所看到的, TotalApplication
只需根据 a.agent_id
.你可以看到 totalapplication
结果中的列。我想要的是删除它并更改 totalapplication
到一个新的两列。我想添加一个 completedsurvey
和 partitalsurvey
列。所以基本上这部分会变成
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;
不隶属于 dba.stackexchange