Както можете да видите в документите на ORACLE
Това означава, че ако групирате само по o.CUSTOMER_ID
, всички други полета в списъка за избор трябва да са агрегатни функции (като COUNT, MAX и т.н.).
В случай на полета, които повтарят стойности във всяка група (като име и фамилия), трябва да ги включите в клаузата GORUP BY.
За да включите сумата на изразходваните пари, можете да добавите друго LEFT JOIN с ПРОДУКТИ и да изберете SUM(op.amount*p.price)
без подзаявка.
Това би било
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;
Не забравяйте винаги да определяте реда на сортиране на вашите заявки, в противен случай той ще бъде недефиниран.