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.)