Comme vous pouvez le voir dans la documentation ORACLE
Cela signifie que si vous regroupez uniquement par o.CUSTOMER_ID
, tous les autres champs de la liste de sélection doivent être des fonctions d'agrégation (comme COUNT, MAX, etc.).
Dans le cas de champs qui répètent des valeurs dans chaque groupe (comme le nom et le prénom), vous devez les inclure dans la clause GORUP BY.
Pour inclure la somme d'argent dépensée, vous pouvez ajouter un autre LEFT JOIN avec PRODUCTS et sélectionner SUM(op.amount*p.price)
sans sous-requête.
Ce serait
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;
N'oubliez pas de toujours définir l'ordre de tri de vos requêtes, sinon il sera indéfini.