select
    p.player_id,
    p.username,
    p.level as current_level,
    case
        when p.level >= 30 then "高阶玩家"
        else "新秀玩家"
    end as player_category,
    round(sum(t.cost), 2) as total_april_spending
from
    (
        select
            player_id,
            username,
            level,
            creation_date
        from
            players
        where
            year(creation_date) = 2025
            and month(creation_date) = 3
    ) p
    join (
        select
            transaction_id,
            player_id,
            item_name,
            cost,
            purchase_time
        from
            transactions
        where
            year(purchase_time) = 2025
            and month(purchase_time) = 4
    ) t on p.player_id = t.player_id
group by
    p.player_id, p.username, p.level
order by
    player_category desc,
    total_april_spending desc,
    p.player_id asc