Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL nie jest wyrażeniem GROUP BY z OracleSQL i InnerQuery Error

Jak widać w dokumentacji ORACLE

Oznacza to, że jeśli grupujesz tylko według o.CUSTOMER_ID , wszystkie inne pola na liście wyboru muszą być funkcjami agregacyjnymi (takimi jak LICZBA, MAKS, itp.).

W przypadku pól powtarzających wartości w każdej grupie (jako imię i nazwisko) należy je uwzględnić w klauzuli GORUP BY.

Aby uwzględnić sumę wydanych pieniędzy, możesz dodać kolejne LEFT JOIN z produktami i wybrać SUM(op.amount*p.price) bez podzapytania.

To byłoby

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;

Pamiętaj, aby zawsze zdefiniować porządek sortowania zapytań, w przeciwnym razie będzie niezdefiniowany.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać pierwszą ciągłą grupę wierszy za pomocą Oracle SQL

  2. Jak wykonać procedurę składowaną Oracle za pośrednictwem łącza do bazy danych

  3. Użycie słowa kluczowego DISTINCT powoduje ten błąd:nie jest to wyrażenie SELECTed

  4. jak znaleźć indeksy na stole w oracle

  5. ORA-28113:predykat zasad zawiera błąd