POSTGRES 9.4: "if"関数をWHEREに置く必要がありますが、私が知っている唯一の方法はSUMのCASE WHEN関数です。集計関数はWHEREでは使用できないため、機能しません。誰もそうする方法を知っていますか? (以下のクエリは私に与えられた答えに起因して編集されているが、それでも実行するために永遠に取っている誰も私を助けることができます。?)WHEREにSUM(CASE WHEN ...)が含まれています
マイクエリ:
SELECT companies.id
, avg(char_length(field_answers.comment))
, count(distinct(field_answers.id))
, count(distinct(surveys.id))
FROM contracts
JOIN companies on contracts.company_id = companies.id
JOIN surveys on companies.id = surveys.company_id
JOIN fields on surveys.id = fields.owner_id
JOIN field_answers on fields.id = field_answers.field_id
JOIN participants on surveys.id = participants.survey_id
WHERE fields.owner_type = 'Survey'
AND surveys.stage in ('finished', 'closed', 'active')
GROUP BY companies.id
HAVING sum(case when participants.finished = 'true' then 1 else 0 end) > 0.9 * count(participants.id)
:
その後は、多少のようにそれを行うだろうか? – Ryan
また、何らかの理由でHAVINGが動作しない場合(要件に応じて)、クエリをネストすることができます。また、アウトタクエリでフィルタを適用できますか? – user1327961
質問を明確にするための基本的な情報を忘れてしまった:クエリーは何をすべきか?完全な 'FROM'句とあなたのバージョンのPostgresを表示してください。 –