В стандартном 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 и т. Д.)