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.