Oracle
 sql >> Database >  >> RDS >> Oracle

GROUP BY / confusione di funzioni aggregate in SQL

In SQL standard (ma non MySQL), quando si utilizza GROUP BY, è necessario elencare tutte le colonne dei risultati che non sono aggregati nella clausola GROUP BY. Quindi, se order_details ha 6 colonne, quindi devi elencare tutte e 6 le colonne (per nome - non puoi usare * nelle clausole GROUP BY o ORDER BY) nella clausola GROUP BY.

Puoi anche fare:

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

Funzionerà perché tutte le colonne non aggregate sono elencate nella clausola GROUP BY.

Potresti fare qualcosa come:

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

Questa query non è realmente significativa (o molto probabilmente non è significativa), ma "funzionerà". Elencherà ogni numero d'ordine separato e combinazione di prezzo dell'ordine e fornirà l'articolo massimo dell'ordine (numero) associato a quel prezzo. Se tutti gli articoli in un ordine hanno prezzi distinti, ti ritroverai con gruppi di una riga ciascuno. OTOH, se nell'ordine sono presenti più articoli allo stesso prezzo (ad esempio £ 0,99 ciascuno), li raggrupperà insieme e restituirà il numero massimo di articoli dell'ordine a quel prezzo. (Suppongo che la tabella abbia una chiave primaria su (order_no, order_item) dove il primo articolo nell'ordine ha order_item = 1 , il secondo elemento è 2, ecc.)