Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL ist kein GROUP BY-Ausdruck mit OracleSQL- und InnerQuery-Fehler

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.