CREATE OR REPLACE FUNCTION get_stores_by_last_calendar_year_revenue() RETURNS TABLE ( store_id INT, store_name TEXT, number_of_orders BIGINT, total_quantity_sold BIGINT, total_revenue NUMERIC ) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT s.store_id, s.name AS store_name, COUNT(DISTINCT o.order_num) AS number_of_orders, COALESCE(SUM(o.quantity), 0) AS total_quantity_sold, COALESCE( SUM( p.price * o.quantity * (1 - COALESCE(o.discount, 0) / 100.0) ), 0 ) AS total_revenue FROM store s LEFT JOIN sells se ON s.store_id = se.store_id LEFT JOIN product p ON se.code = p.code LEFT JOIN includes i ON p.code = i.code LEFT JOIN "order" o ON i.order_num = o.order_num AND o.last_modified_date >= DATE_TRUNC( 'year', CURRENT_DATE ) - INTERVAL '1 year' AND o.last_modified_date < DATE_TRUNC( 'year', CURRENT_DATE ) GROUP BY s.store_id, s.name ORDER BY total_revenue DESC; END; $$;