| 1 | CREATE OR REPLACE FUNCTION fn_get_customer_subscription_summary(
|
|---|
| 2 | p_customer_id BIGINT
|
|---|
| 3 | )
|
|---|
| 4 | RETURNS TEXT
|
|---|
| 5 | LANGUAGE plpgsql
|
|---|
| 6 | AS $$
|
|---|
| 7 | DECLARE
|
|---|
| 8 | v_active_count INT;
|
|---|
| 9 | v_suspended_count INT;
|
|---|
| 10 | v_monthly_fee NUMERIC;
|
|---|
| 11 | BEGIN
|
|---|
| 12 | SELECT
|
|---|
| 13 | COUNT(*) FILTER (WHERE s.status = 'active'),
|
|---|
| 14 | COUNT(*) FILTER (WHERE s.status = 'suspended'),
|
|---|
| 15 | COALESCE(SUM(p.monthly_fee) FILTER (WHERE s.status = 'active'), 0)
|
|---|
| 16 | INTO
|
|---|
| 17 | v_active_count,
|
|---|
| 18 | v_suspended_count,
|
|---|
| 19 | v_monthly_fee
|
|---|
| 20 | FROM accounts a
|
|---|
| 21 | JOIN subscriptions s
|
|---|
| 22 | ON s.account_id = a.account_id
|
|---|
| 23 | JOIN plans p
|
|---|
| 24 | ON p.plan_id = s.plan_id
|
|---|
| 25 | WHERE a.customer_id = p_customer_id;
|
|---|
| 26 |
|
|---|
| 27 | RETURN
|
|---|
| 28 | 'Active subscriptions: ' || v_active_count ||
|
|---|
| 29 | ', Suspended subscriptions: ' || v_suspended_count ||
|
|---|
| 30 | ', Active monthly fee: ' || v_monthly_fee;
|
|---|
| 31 | END;
|
|---|
| 32 | $$;
|
|---|
| 33 |
|
|---|
| 34 | SELECT fn_get_customer_subscription_summary(1);
|
|---|