sql >> Databáze >  >> RDS >> Oracle

SQL není výraz GROUP BY s OracleSQL a InnerQuery Error

Jak můžete vidět v dokumentech ORACLE

To znamená, že pokud seskupíte pouze podle o.CUSTOMER_ID , všechna ostatní pole ve výběrovém seznamu musí být agregační funkce (jako COUNT, MAX atd.).

V případě polí, která opakují hodnoty v každé skupině (jako jméno a příjmení), měli byste je zahrnout do klauzule GORUP BY.

Chcete-li zahrnout částku utracených peněz, můžete přidat další LEFT JOIN s PRODUKTY a vybrat SUM(op.amount*p.price) bez poddotazu.

To by bylo

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;

Nezapomeňte vždy definovat pořadí řazení vašich dotazů, jinak nebude definováno.




  1. Jak používat klauzuli hromadného sběru PL/SQL s příkazem FETCH INTO

  2. Jak nainstalovat luasql na Linux CentOS 7?

  3. Jak seřadit podle dvou sloupců v SQL?

  4. Kumulativně přidejte chybějící data z předchozího měsíce nebo roku