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

Reply via email to