Вы действительно хотите сделать это на уровне презентации. Таблицы SQL и наборы результатов представляют неупорядоченные наборы. Единственное исключение - когда конечный результат имеет order by
. Таким образом, вы должны быть очень осторожны, чтобы защитить от перестановки.
Ваши данные сначала имеют самую низкую цену. Таким образом, в MySQL 8+ или почти в любой другой базе данных вы можете сделать:
select (case when row_number() over (partition by industry order by price, country) = 1
then industry
end) as industry,
country, price
from t
order by industry, price, country;
Я не могу сказать, является ли пробел во втором столбце преднамеренным, но вы можете включить его.
Позвольте мне повторить: внешний order by
имеет решающее значение для обеспечения того, чтобы данные были такими, как вы хотите. Без результата оператор say может выглядеть «правильно», но может не работать при следующем запуске запроса.
В более ранних версиях MySQL вы можете делать то же самое, но это выглядит иначе. Вы не пометили версию, поэтому я буду использовать более свежую версию.