Это классическая проблема, с которой сталкивается большинство людей, использующих MySQL, с GROUP BY. MySQL разрешает запросы, которые не разрешены в стандартном SQL и в большинстве других марок баз данных.
Вам нужна полная строка, включая столбцы, отличные от cust_id, по которому вы группируете, чтобы эта строка имела самую высокую (или самую низкую) цену в этой группе. Вы не можете получить это от GROUP BY.
Что я действительно хочу, так это ... price_id ассоциируется с ценой.
Но какую цену вы хотите: ту, что в строке с максимальной ценой, или ту, что в строке с минимальной ценой? Это могут быть разные строки.
Cust_id. Price_id Price
----------------------------
2. 654 600 <-- max price, price_id 654
2. 432 487 <-- min price, price_id 432
2. 546 500
Что если несколько строк имеют одинаковую цену, но разные идентификаторы price_id? Должен ли он вернуть 654 или 546?
Cust_id. Price_id Price
----------------------------
2. 654 600 <-- max price, price_id 654
2. 432 487
2. 546 600 <-- max price, price_id 546
Вместо этого, если вы хотите, чтобы price_id максимальной и минимальной цены, вам нужны две строки: строка, в которой нет другой строки с таким же cust_id и более высокой ценой, и строка, в которой нет другой строки с тем же cust_id и более низкой ценой.
SELECT tmax.cust_id, tmax.price_id, tmax.price, tmin.price_id, tmin.price
FROM table tmax
JOIN table tmin ON tmax.cust_id = tmin.cust_id
WHERE NOT EXISTS (SELECT * FROM table t1 WHERE t1.cust_id = tmax.cust_id AND t1.price > tmax.price)
AND NOT EXISTS (SELECT * FROM table t2 WHERE t2.cust_id = tmin.cust_id AND t2.price > tmin.price)