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

SQL er ikke et GROUP BY-udtryk med OracleSQL og InnerQuery Error

Som du kan se i ORACLE-dokumenterne

Det betyder, at hvis du kun grupperer efter o.CUSTOMER_ID , skal alle de andre felter i den valgte liste være aggregerede funktioner (såsom COUNT, MAX osv.).

I tilfælde af felter, der gentager værdier i hver gruppe (som navn og efternavn), bør du inkludere dem i GORUP BY-sætningen.

For at inkludere summen af ​​brugte penge kan du tilføje endnu et LEFT JOIN med PRODUKTER og vælge SUM(op.amount*p.price) uden en underforespørgsel.

Det ville væ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;

Husk altid at definere sorteringsrækkefølgen for dine forespørgsler, ellers vil den være udefineret.




  1. SQL Server, der svarer til MySQL's BRUG

  2. Mysql:Sådan får du hver række, der har mere end et vist antal decimaler efter prikken

  3. Hvorfor bruger iteration gennem et stort Django QuerySet enorme mængder hukommelse?

  4. MySQL-import - Hvordan ignorerer man Drop-tabel, hvis der findes linje?