[〜#〜] edit [〜#〜]Postgres 9.3
次のスキーマを持つレポートを作成しています: http://sqlfiddle.com/#!15/fd104/2
現在のクエリは次のように正常に機能しています。
基本的には3テーブルの内部結合です。私はこのクエリを作成しませんでしたが、それを残した開発者がクエリを変更したいと考えています。ご覧のとおり、TotalApplication
はa.agent_id
に基づいてアプリケーションの総数を数えるだけです。そして、結果にtotalapplication
列が表示されます。それを削除して、totalapplication
を新しい2つの列に変更します。 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
しかし、私はそのクエリをどこに配置するか、またはクエリがどのようになるかを知りません。
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;