Oracle
 sql >> Base de données >  >> RDS >> Oracle

SQL n'est pas une expression GROUP BY avec OracleSQL et InnerQuery Error

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.