CREATE OR REPLACE FUNCTION get_employees_by_hours_and_pay() RETURNS TABLE ( id BIGINT, employee_name TEXT, total_hours_worked NUMERIC, total_pay NUMERIC ) LANGUAGE plpgsql AS $$ BEGIN RETURN QUERY SELECT e.id, p.name AS employee_name, COALESCE(SUM(w.working_hours), 0) AS total_hours_worked, COALESCE(SUM(w.wage), 0) AS total_pay FROM employees e JOIN personal p ON e.id = p.id LEFT JOIN worked w ON e.id = w.id GROUP BY e.id, p.name ORDER BY total_hours_worked DESC, total_pay DESC; END; $$;