probablement préférable d'utiliser un modèle pour la table de jointure:
class PlaylistTrack < Sequel::Model(:playlists_tracks)
many_to_one :playlist
many_to_one :track
def self.top10_tracks
group_and_count(:track_id).
reverse(:count).
limit(10).
eager(:track).
all.
map(&:track)
end
end
Notez que cela fait deux requêtes, mais il fait que le tableau résultant des pistes est ordonnée par popularité.
Si vous le souhaitez, vous pouvez le faire en une seule requête sans un modèle de table de jointure:
def Track.top10
join(:playlists_tracks, :track_id=>:id).
group{tracks[:id]}.
select_all(:tracks).
select_append{count(tracks[:id])}.
order{count(tracks[:id]).desc}.
limit(10).
all
end
Notez que celui-ci utilise SQL non standard, car il sélectionne les expressions non globales que vous n'êtes pas regrouper par, mais cela fonctionne dans PostgreSQL. Vous pourriez avoir ce travail avec SQL standard en regroupant par toutes les colonnes dans la table des pistes.
S'il vous plaît montrer un exemple de données, «commander par ... limite» –