Наконец я нашел все функции, следующие за кодом выше. Над вопросом было разработать представление базы данных ниже.
CREATE OR REPLACE VIEW summery AS
SELECT
g.id,
g.supply_date,
g.grn_no,
COUNT(b.bag_no) AS bags,
CONCAT(s.fname," ", s.lname) AS name,
SUM(b.weight) AS qty,
AVG(b.bag_mc) AS mc,
(g.dust_initial/g.dust_weight)*100 AS dust,
(g.ubs_initial/g.ubs_weight)*100 AS ubs,
p.fraction_1 AS fraction_1,
CASE
WHEN EXISTS (SELECT * FROM comments c WHERE c.grn_id = g.id AND c.status = 'approved') THEN 'Approved'
WHEN EXISTS (SELECT * FROM comments c WHERE c.grn_id = g.id AND c.status = 'approved with concession') THEN 'Approved with Concession'
WHEN EXISTS (SELECT * FROM comments c WHERE c.grn_id = g.id AND c.status = 'concession required') THEN 'Concession Required'
WHEN EXISTS (SELECT * FROM comments c WHERE c.grn_id = g.id AND c.status = 'rejected') THEN 'Rejected'
ELSE 'pending' END AS status
FROM grns g
JOIN suppliers s ON s.id = g.supplier_id
JOIN psds p ON g.id = p.grn_id
JOIN bags b ON g.id = b.grn_id
GROUP BY g.id
ORDER BY g.id DESC