Это не то, как GROUP BY должен работать. Если вы группируете по количеству столбцов, ваш выбор может вернуть только:
- столбцы, которые вы группируете по
- Функции агрегирования из других столбцов, таких как MIN (), MAX (), AVG () ...
Так что вам нужно сделать это:
SELECT
bs.step_number,
MIN(p.price) AS min_price, pd.name as product_name
FROM
builder_product bp
JOIN builder_step bs ON bp.builder_step_id = bs.builder_step_id
JOIN builder b ON bp.builder_id = b.builder_id
JOIN product p ON p.product_id = bp.product_id
JOIN product_description pd ON p.product_id = pd.product_id
WHERE b.builder_id = '74' and bs.optional != '1'
group by bs.step_number, pd.name
ORDER by bs.step_number, min_price
(MySQL допускает очень упрощенный синтаксис и удачно удалит случайные строки для каждой группы, но другие СУБД вызовут ошибку с вашим исходным запросом.)