with temp0 as (
select distinct p.player_id
from players p inner join transactions t
on p.player_id = t.player_id
where date_format(creation_date,"%Y-%m") = "2025-03"
and purchase_time >= "2025-04-01" and purchase_time <= "2025-04-30"
), temp1 as (
select t0.player_id,round(sum(cost),2) as total_april_spending
from temp0 t0 inner join transactions t on t0.player_id = t.player_id
where purchase_time >= "2025-04-01" and purchase_time <= "2025-04-30"
group by t0.player_id
), temp2 as (
select t1.player_id,p.username,
level as current_level,
case
when level >= 30 then "高阶玩家"
else "新秀玩家"
end as player_category,total_april_spending
from temp1 t1 inner join players p on t1.player_id = p.player_id
order by player_category desc,total_april_spending desc,t1.player_id asc
)
select * from temp2;