sql >> Base de Datos >  >> RDS >> Oracle

SQL no es una expresión GROUP BY con OracleSQL e InnerQuery Error

Como puede ver en los documentos de ORACLE

Esto significa que si solo agrupa por o.CUSTOMER_ID , todos los demás campos de la lista de selección deben ser funciones agregadas (como COUNT, MAX, etc.).

En el caso de campos que repitan valores en cada grupo (como nombre y apellido) deberá incluirlos en la cláusula GORUP BY.

Para incluir la suma de dinero gastado, puede agregar otro LEFT JOIN con PRODUCTOS y seleccionar SUM(op.amount*p.price) sin una subconsulta.

Eso sería

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;

Recuerda siempre definir el orden de clasificación de tus consultas, de lo contrario quedará indefinido.