Jak widać w dokumentacji ORACLE
Oznacza to, że jeśli grupujesz tylko według o.CUSTOMER_ID
, wszystkie inne pola na liście wyboru muszą być funkcjami agregacyjnymi (takimi jak LICZBA, MAKS, itp.).
W przypadku pól powtarzających wartości w każdej grupie (jako imię i nazwisko) należy je uwzględnić w klauzuli GORUP BY.
Aby uwzględnić sumę wydanych pieniędzy, możesz dodać kolejne LEFT JOIN z produktami i wybrać SUM(op.amount*p.price)
bez podzapytania.
To byłoby
SELECT o.CUSTOMER_ID AS "ID", c.name AS "Name", c.SURNAME AS "Surname",
SUM(op.AMOUNT*p.PRICE) AS "Money spent"
FROM ORDERS o
LEFT JOIN CUSTOMERS c ON c.ID = o.CUSTOMER_ID
LEFT JOIN ORDERS_PRODUCTS op ON op.ORDER_ID = o.id
LEFT JOIN PRODUCTS p ON p.id = op.PRODUCT_ID
GROUP BY o.CUSTOMER_ID, c.name AS "Name", c.SURNAME
ORDER BY o.CUSTOMER_ID, c.name AS "Name", c.SURNAME;
Pamiętaj, aby zawsze zdefiniować porządek sortowania zapytań, w przeciwnym razie będzie niezdefiniowany.