Bryce Nesbitt wrote:
All;
Is there a way to get a conditional aggregate? I have this two column view:
SELECT count(*) AS count, xx_plan.plan_name
FROM xx_membership
JOIN xx_account USING (account_id)
JOIN xx_plan USING (plan_id)
WHERE xx_membership.status = 10
GROUP BY xx_plan.plan_name;
And would like to add additional columns (not rows) breaking out
"status=20" and "status=30" totals.
Is this possible without a stored procedure?
SELECT sum(CASE WHEN xx_membership.status = 10 THEN 1 ELSE 0 END) AS sum10,
sum(CASE WHEN xx_membership.status = 20 THEN 1 ELSE 0 END) AS sum20,
sum(CASE WHEN xx_membership.status = 30 THEN 1 ELSE 0 END) AS sum30,
xx_plan.plan_name
FROM xx_membership
JOIN xx_account USING (account_id)
JOIN xx_plan USING (plan_id)
WHERE xx_membership.status IN (10,20,30)
GROUP BY xx_plan.plan_name;
You may or may not care about including the WHERE clause there depending
upon its selectivity and whether there's an index for the planner to use.
HTH,
Geoff
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings