Postgresは同じクエリ上の異なる状態でカウントされます
-
29-09-2020 - |
質問
編集 postgres 9.3
私はこれを次のスキーマを持つレポートに取り組んでいます。 /#!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
.
しかし、そのクエリを置くか、またはクエリのように見えるかどうかをDunnoさん。最後の出力にはこれらの列があります。
.
agent_id, name, completedsurvey, partialsurvey, loginhours, applicationperhour, rph
[OK]の場合は、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;
.
edit
古いバージョンの場合(<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