Postgres Count 在同一查询中具有不同的条件
Postgres Count with different condition on the same query
我正在处理具有以下架构的报告:http://sqlfiddle.com/#!15/fd104/2
当前查询工作正常,如下所示:
基本上是一个3table内连接。我没有提出这个查询,但是留下它的开发人员,我想修改查询。可以看到,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;
以上假定当前版本的 Postgres(在撰写本文时为 9.4)。对于旧版本 (< 9.4),您需要使用 case
语句,因为那里不支持 filter
条件:
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;
我正在处理具有以下架构的报告:http://sqlfiddle.com/#!15/fd104/2
当前查询工作正常,如下所示:
基本上是一个3table内连接。我没有提出这个查询,但是留下它的开发人员,我想修改查询。可以看到,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;
以上假定当前版本的 Postgres(在撰写本文时为 9.4)。对于旧版本 (< 9.4),您需要使用 case
语句,因为那里不支持 filter
条件:
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;