Catalist needs a campaign-level view of outreach performance for campaigns launched during September 2025. Write a PostgreSQL query that joins campaigns, constituents, and outreach events, while preserving campaigns with no matching constituents or events.
Requirements
- Return September 2025 campaigns with their district and total distinct constituents.
- Count distinct constituents with completed outreach and completed outreach that received a positive response.
- Calculate the completed-outreach percentage using conditional aggregation, avoiding division by zero.
- Include only campaigns with at least one completed outreach, and order by completed-outreach percentage descending, then campaign name.