Pergunta

EDITAR Postgres 9.3

Estou trabalhando em um relatório que possui o seguinte esquema: http://sqlfiddle.com/#!15/fd104/2

A consulta atual está funcionando bem e é assim:

enter image description here

Basicamente é uma junção interna de 3 tabelas.Não fui eu que fiz essa consulta e sim o desenvolvedor que a deixou e quero modificar a consulta.Como você pode ver, TotalApplication apenas conta a aplicação total com base no a.agent_id.E você pode ver o totalapplication coluna no resultado.O que eu quero é remover isso e mudar o totalapplication para uma nova coluna de duas.Eu quero adicionar um completedsurvey e partitalsurvey coluna.Então basicamente esta parte se tornará

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

acabei de adicionar AND disposition = 'Completed Survey' Mas preciso de outra coluna para partialsurvey que tem a mesma consulta com completedsurvey sendo a única diferença é

AND disposition = 'Partial Survey'

e

COUNT(a.id) as PartialSurvey

Mas não sei onde colocar essa consulta ou como será a consulta. Portanto, a saída final tem essas colunas

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

Quando estiver tudo bem, applicationperhour e rph eu posso consertar sozinho

Foi útil?

Solução

Se bem entendi, você está procurando um agregado filtrado (condicional):

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;

Editar
para versões mais antigas (<9.4), você precisa usar um case declaração:

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top