Changes between Initial Version and Version 1 of AdvancedReport8


Ignore:
Timestamp:
08/21/26 06:01:40 (29 hours ago)
Author:
235018
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport8

    v1 v1  
     1= Stores ordered by highest approximate product review
     2{{{#!sql
     3CREATE OR REPLACE FUNCTION get_stores_by_average_review()
     4RETURNS TABLE (
     5    store_id INT,
     6    store_name TEXT,
     7    average_review NUMERIC,
     8    number_of_reviews BIGINT
     9)
     10LANGUAGE plpgsql
     11AS $$
     12BEGIN
     13    RETURN QUERY
     14    SELECT
     15        s.store_id,
     16        s.name AS store_name,
     17        COALESCE(AVG(r.rating), 0) AS average_review,
     18        COUNT(r.order_num) AS number_of_reviews
     19    FROM store s
     20    LEFT JOIN sells se
     21        ON s.store_id = se.store_id
     22    LEFT JOIN includes i
     23        ON se.code = i.code
     24    LEFT JOIN "order" o
     25        ON i.order_num = o.order_num
     26    LEFT JOIN review r
     27        ON o.order_num = r.order_num
     28    GROUP BY
     29        s.store_id,
     30        s.name
     31    ORDER BY
     32        average_review DESC;
     33END;
     34$$;
     35
     36}}}
     37
     38== Relational Algebra
     39- O(order_num, quantity, status, last_modified_date, payment_method, discount)
     40- I(code, order_num)
     41- R(order_num, comment, rating, last_modified_date)
     42- S(store_id, name, date_of_founding, physical_address, store_email, rating)
     43- SE(code, store_id, quantity, discount)
     44
     45**JOIN stores with their products:**
     46- J1 ← S ⟕S.store_id = SE.store_id SE
     47
     48**JOIN products with the orders that they have been included in:**
     49- J2 ← J1 ⟕SE.code = I.code I
     50- J3 ← J2 ⟕I.order_num = O.order_num O
     51
     52**JOIN orders with REVIEWS:**
     53- J4 ← J3 ⟕O.order_num = R.order_num R
     54
     55**Calculate number of reviews and average review rating for each store:**
     56- R1 ← γstore_id, name;
     57     AVG(rating) → average_review,
     58     COUNT(order_num) → number_of_reviews
     59     (J4)
     60
     61**Sort by average review:**
     62- R_final ← τaverage_review DESC(R1)
     63