POSTGRES 9.4: Ich muss eine "if" -Funktion auf WHERE setzen, aber die einzige Weise, die ich weiß, ist ein CASE WHEN Funktion SUMME. Da Sie Aggregatfunktionen in WHERE nicht verwenden können, funktioniert es nicht. Kennt jemand einen Weg, dies zu tun? (Die Abfrage unten wurde wegen mir gegeben auf die Antworten bearbeitet, aber immer noch nimmt immer auszuführen mir jemand helfen kann.?)Äquivalent zu SUMME (CASE WHEN ...) in WO
Meine Frage:
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)
Sie wollen 'HAVING' statt' WHERE'? – Ryan
Oder, wenn HAVING aus irgendeinem Grund nicht funktionieren würde (abhängig von Ihren Anforderungen) können Sie die Abfrage verschachteln und in der äußeren Abfrage wenden Sie den Filter an? – user1327961
Sie haben grundlegende Informationen vergessen, um die Frage zu klären: Was soll die Abfrage tun? Zeigen Sie die vollständige FROM-Klausel und Ihre Version von Postgres. –