Вот мое Объяснение решения (окончательное решение в шаг 3 ):
Шаг 1:
Фильтрация строк с минимальным количеством монет, необходимых на основе мощности и кода. Почему код и мощность, потому что требование требует от нас фильтрации по возрасту и мощности, а возраст имеет 1-1 отношение к коду, поэтому код и мощность являются логическими местами для фильтрации
select w2.code, w2.power, min(w2.coins_needed) coins
from wands w2
group by w2.code, w2.power
Шаг 2:
Используйте эту таблицу только с отфильтрованными строками, чтобы получить все столбцы таблицы палочек
select w.id, wp.age, w.code, min(w.coins_needed), w.power from wands w
join (
select w2.code, w2.power, min(w2.coins_needed) coins from wands w2
group by w2.code, w2.power
) wcp
on wcp.code = w.code and wcp.power = w.power and wcp.coins = w.coins_needed
Шаг 3:
Последний шаг состоит в том, чтобы присоединиться к wands_property с новой таблицей, которую мы получили в шаге 2, и упорядочить ее в соответствии с требованиями задачи
select w.id, wp.age, w.code, min(w.coins_needed), w.power from wands w
join (
select w2.code, w2.power, min(w2.coins_needed) coins from wands w2
group by w2.code, w2.power
) wcp
on wcp.code = w.code and wcp.power = w.power and wcp.coins = w.coins_needed
join wands_property wp
on wp.code = w.code and wp.is_evil=0
order by w.power desc, wp.age desc ;