DatabaseProgramming: 05 Customer subscription summary.sql

File 05 Customer subscription summary.sql, 1.1 KB (added by 231139, 10 days ago)
Line 
1CREATE OR REPLACE FUNCTION public.fn_get_customer_subscription_summary(p_customer_id bigint)
2RETURNS text
3LANGUAGE plpgsql
4STABLE
5AS $$
6DECLARE
7 v_active_count integer;
8 v_suspended_count integer;
9 v_closed_count integer;
10 v_monthly_fee numeric;
11BEGIN
12 IF NOT EXISTS (SELECT 1 FROM public.customers WHERE customer_id = p_customer_id) THEN
13 RETURN format('Customer %s does not exist.', p_customer_id);
14 END IF;
15
16 SELECT COUNT(*) FILTER (WHERE s.status = 'active'),
17 COUNT(*) FILTER (WHERE s.status = 'suspended'),
18 COUNT(*) FILTER (WHERE s.status IN ('cancelled', 'expired'))
19 INTO v_active_count, v_suspended_count, v_closed_count
20 FROM public.accounts a
21 LEFT JOIN public.subscriptions s ON s.account_id = a.account_id
22 WHERE a.customer_id = p_customer_id;
23
24 v_monthly_fee := public.fn_get_customer_monthly_recurring_charge(p_customer_id);
25
26 RETURN format(
27 'Active subscriptions: %s, Suspended subscriptions: %s, Ended subscriptions: %s, Monthly recurring charge: %s MKD',
28 v_active_count, v_suspended_count, v_closed_count, v_monthly_fee
29 );
30END;
31$$;
32