sql >> Database >  >> RDS >> Oracle

SQL geen GROUP BY-expressie met OracleSQL en InnerQuery Error

Zoals je kunt zien in de ORACLE-documenten

Dit betekent dat als u alleen groepeert op o.CUSTOMER_ID , moeten alle andere velden in de selectielijst samengestelde functies zijn (zoals COUNT, MAX, enz.).

In het geval van velden die waarden in elke groep herhalen (zoals naam en achternaam), moet u deze opnemen in de GORUP BY-clausule.

Om de som van het bestede geld op te nemen, kunt u nog een LEFT JOIN toevoegen aan PRODUCTS en SUM(op.amount*p.price) selecteren zonder een subquery.

Dat zou zijn

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;

Denk eraan om altijd de sorteervolgorde van uw zoekopdrachten te definiëren, anders wordt deze niet gedefinieerd.




  1. Een externe HD gebruiken om naar een mysql-database te schrijven en deze op te slaan

  2. Dynamische sql maken voor met sys_refcursor in oracle

  3. Variabele doorgeven in mysql_query

  4. Een associatieve array in een geneste tabel vullen