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

GROUP BY / zamieszanie funkcji agregujących w SQL

W standardowym SQL (ale nie MySQL) używając GROUP BY, musisz wypisać wszystkie kolumny wynikowe, które nie są agregowane w klauzuli GROUP BY. Tak więc, jeśli order_details ma 6 kolumn, musisz wypisać wszystkie 6 kolumn (według nazwy - nie możesz użyć * w klauzulach GROUP BY lub ORDER BY) w klauzuli GROUP BY.

Możesz także zrobić:

SELECT order_no, SUM(order_price)
  FROM order_details
 GROUP BY order_no;

To zadziała, ponieważ wszystkie kolumny nie będące agregacją są wymienione w klauzuli GROUP BY.

Możesz zrobić coś takiego:

SELECT order_no, order_price, MAX(order_item)
  FROM order_details
 GROUP BY order_no, order_price;

To zapytanie nie jest naprawdę znaczące (lub najprawdopodobniej nie ma sensu), ale zadziała. Wymieni każdą oddzielną kombinację numeru zamówienia i ceny zamówienia oraz poda maksymalną pozycję zamówienia (liczbę) związaną z tą ceną. Jeśli wszystkie produkty w zamówieniu mają różne ceny, otrzymasz grupy składające się z jednego wiersza. OTOH, jeśli w zamówieniu jest kilka pozycji w tej samej cenie (powiedzmy 0,99 GBP każdy), zgrupuje je i zwróci maksymalny numer pozycji zamówienia w tej cenie. (Zakładam, że tabela ma klucz podstawowy na (order_no, order_item) gdzie pierwsza pozycja w zamówieniu ma order_item = 1 , drugi element to 2 itd.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Określanie lokalizacji odpowiedniego pliku tnsnames.ora

  2. rs.last() daje Nieprawidłową operację dla zestawu wyników tylko do przodu:last

  3. Jak zwrócić zestaw wyników z procedury składowanej w Oracle?

  4. Loguj dane wyjściowe DBMS_OUTPUT.Put_Line do tabeli w Oracle za pomocą DBMS_OUTPUT.Get_Lines

  5. Polecenia kopii zapasowej RMAN