wiki:AdvancedReport10

Clients ordered by number of orders

CREATE OR REPLACE FUNCTION get_clients_by_number_of_orders()
RETURNS TABLE (
    client_id INT,
    client_name TEXT,
    number_of_orders BIGINT
)
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN QUERY
    SELECT
        c.client_id,
        c.name AS client_name,
        COUNT(DISTINCT o.order_num) AS number_of_orders
    FROM client c
    JOIN makes_order mo
        ON c.client_id = mo.client_id
    JOIN "order" o
        ON mo.order_num = o.order_num
    GROUP BY
        c.client_id,
        c.name
    ORDER BY
        number_of_orders DESC;
END;
$$;

Relational Algebra

  • O(order_num, quantity, status, last_modified_date, payment_method, discount)
  • C(client_id, name, first_name, last_name, email, password, delivery_address)
  • MO(client_id, order_num)

JOIN clients with their orders:

  • J1 ← C ⨝C.client_id = MO.client_id MO
  • J2 ← J1 ⨝MO.order_num = O.order_num O

Calculate number of distinct orders for each lient:

  • R ← γclient_id, name;

COUNT(DISTINCT order_num) → number_of_orders (J2)

Sort by total numebr of orders:

  • R_final ← τnumber_of_orders DESC(R)
Last modified 29 hours ago Last modified on 08/21/26 06:13:28
Note: See TracWiki for help on using the wiki.