Ve standardním SQL (ale ne MySQL), když používáte GROUP BY, musíte v klauzuli GROUP BY uvést všechny sloupce výsledků, které nejsou agregované. Pokud tedy order_details
má 6 sloupců, pak musíte uvést všech 6 sloupců (podle názvu – nelze použít *
v klauzuli GROUP BY nebo ORDER BY) v klauzuli GROUP BY.
Můžete také:
SELECT order_no, SUM(order_price)
FROM order_details
GROUP BY order_no;
To bude fungovat, protože všechny neagregované sloupce jsou uvedeny v klauzuli GROUP BY.
Můžete udělat něco jako:
SELECT order_no, order_price, MAX(order_item)
FROM order_details
GROUP BY order_no, order_price;
Tento dotaz není ve skutečnosti smysluplný (nebo s největší pravděpodobností není smysluplný), ale bude „fungovat“. Uvede každé samostatné číslo objednávky a kombinaci ceny objednávky a uvede maximální položku (číslo) objednávky spojenou s touto cenou. Pokud mají všechny položky v objednávce odlišné ceny, skončíte se skupinami po jednom řádku. OTOH, pokud je v objednávce několik položek za stejnou cenu (řekněme 0,99 GBP za každou), pak je seskupí a vrátí maximální číslo položky objednávky za tuto cenu. (Předpokládám, že tabulka má primární klíč na (order_no, order_item)
kde první položka v objednávce má order_item = 1
, druhá položka je 2 atd.)