select w.id
,wp.age
,w.coins_needed
,w.power
from wands w
inner join wands_property wp
on w.code = wp.code
inner join (
select wp1.age
,w1.power
,min(w1.coins_needed) min_coins_needed
from wands w1
inner join wands_property wp1
on w1.code = wp1.code
where 1=1
and wp1.is_evil = 0
group by wp1.age, w1.power) m
on wp.age = m.age
and w.power = m.power
and w.coins_needed = m.min_coins_needed
order by w.power desc, wp.age desc