Wie Sie in der ORACLE-Dokumentation sehen können
Das heißt, wenn Sie nur nach o.CUSTOMER_ID
gruppieren , alle anderen Felder in der Auswahlliste müssen Aggregatfunktionen sein (wie COUNT, MAX usw.).
Bei Feldern, die Werte in jeder Gruppe wiederholen (wie Name und Nachname), sollten Sie sie in die GORUP BY-Klausel aufnehmen.
Um den ausgegebenen Geldbetrag einzubeziehen, könnten Sie einen weiteren LEFT JOIN mit PRODUCTS hinzufügen und SUM(op.amount*p.price)
auswählen ohne Unterabfrage.
Das wäre
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;
Denken Sie immer daran, die Sortierreihenfolge Ihrer Abfragen festzulegen, da sie sonst undefiniert ist.