Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

SQL não é uma expressão GROUP BY com OracleSQL e InnerQuery Error


Como você pode ver nos documentos ORACLE

Isso significa que se você agrupar apenas por o.CUSTOMER_ID , todos os outros campos na lista de seleção devem ser funções agregadas (como COUNT, MAX, etc.).

No caso de campos que repetem valores em cada grupo (como nome e sobrenome) você deve incluí-los na cláusula GORUP BY.

Para incluir a soma do dinheiro gasto, você pode adicionar outro LEFT JOIN com PRODUCTS e selecionar SUM(op.amount*p.price) sem uma subconsulta.

Isso seria
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;

Lembre-se sempre de definir a ordem de classificação de suas consultas, caso contrário ela ficará indefinida.