Oracle
 sql >> Database >  >> RDS >> Oracle

SQL non è un'espressione GROUP BY con OracleSQL e InnerQuery Error

Come puoi vedere nei documenti ORACLE

Ciò significa che se raggruppi solo per o.CUSTOMER_ID , tutti gli altri campi nell'elenco di selezione devono essere funzioni aggregate (come COUNT, MAX, ecc.).

Nel caso di campi che ripetono valori in ogni gruppo (come nome e cognome) dovresti includerli nella clausola GORUP BY.

Per includere la somma di denaro spesa, puoi aggiungere un altro LEFT JOIN with PRODUCTS e selezionare SUM(op.amount*p.price) senza una sottoquery.

Sarebbe

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;

Ricorda sempre di definire l'ordinamento delle tue query, altrimenti non sarà definito.