POSTGRES 9.4:我需要在WHERE上放一個「if」函數,但我知道的唯一方法是SUM CASE WHEN函數。由於您無法在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)
你想'HAVING',而不是'WHERE'? – Ryan
或者,如果由於某種原因HAVING不能工作(取決於您的要求),您可以嵌套查詢,並在外部查詢中應用過濾器? – user1327961
您忘記了基本信息以明確問題:查詢應該做什麼?顯示完整的'FROM'子句和你的Postgres版本。 –