В стандартния SQL (но не MySQL), когато използвате GROUP BY, трябва да изброите всички колони с резултати, които не са агрегати в клаузата GROUP BY. Така че, ако order_details
има 6 колони, тогава трябва да изброите всички 6 колони (по име - не можете да използвате *
в клаузите GROUP BY или ORDER BY) в клаузата GROUP BY.
Можете също да направите:
SELECT order_no, SUM(order_price)
FROM order_details
GROUP BY order_no;
Това ще работи, защото всички неагрегирани колони са изброени в клаузата GROUP BY.
Можете да направите нещо като:
SELECT order_no, order_price, MAX(order_item)
FROM order_details
GROUP BY order_no, order_price;
Тази заявка не е наистина смислена (или най-вероятно няма смисъл), но ще „работи“. Той ще изброява всеки отделен номер на поръчка и комбинация от цена на поръчката и ще даде максималния артикул (номер) на поръчката, свързан с тази цена. Ако всички артикули в една поръчка имат различни цени, ще получите групи от по един ред всеки. OTOH, ако има няколко артикула в поръчката на една и съща цена (да речем £0,99 всеки), тогава той ще ги групира заедно и ще върне максималния номер на артикула за поръчка на тази цена. (Предполагам, че таблицата има първичен ключ на (order_no, order_item)
където първият елемент в поръчката има order_item = 1
, вторият елемент е 2 и т.н.)