I’m trying to find the top 3 players for multiple different metrics. I have a query that works well for one field:
from(c in Character,
join: ci in CharacterInfo,
on: c.id == ci.character_id,
limit: 3,
select: %{
character_name: c.name,
player_kills: %{
rank: rank() |> over(order_by: [desc: ci.player_kills]),
amount: ci.player_kills
},
}
)
|> Repo.all()
and this returns an array:
[
%{character_name: "name_1", player_kills: %{amount: 67, rank: 1}},
%{character_name: "name_2", player_kills: %{amount: 59, rank: 2}},
%{character_name: "name_3", player_kills: %{amount: 56, rank: 3}}
]
The issue is I need more than just player_kills
, ie monster_kills
.
How can I write this query so that it returns something like:
%{
player_kills: [
%{character_name: "name_1", amount: 90, rank: 1},
%{character_name: "name_2", amount: 80, rank: 2},
%{character_name: "name_3", amount: 70, rank: 3}
],
monster_kills: [
%{character_name: "name_7", amount: 40, rank: 1},
%{character_name: "name_1", amount: 30, rank: 2},
%{character_name: "name_3", amount: 20, rank: 3}
]
}