Единственный способ, которым я обнаружил, что в Elixir можно упорядочить отношение «многие ко многим» - это вывести вторичную таблицу из отношения и делать «как обычно в алхимии». Примерно как то так:
secondr_table = Candidate._descriptor.find_relationship('voters').secondary_table
cands_by_rank = (
session.query(
Candidate.id,
func.count(secondr_table.c.candidate_id).label('total')
)
.join(secondr_table)
.group_by(Candidate)
.order_by('total DESC')