PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Colonne de fonction de fenêtre Postgres avec Rails

essayez ceci :

Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")

il devrait vous renvoyer des objets de personnage avec un attribut de rang, comme documenté ici . Cependant, cela peut ne pas être indépendant de la base de données et a tendance à devenir désordonné si vous passez autour des objets.

une autre solution (coûteuse) consiste à ajouter une colonne de classement à votre table et à demander à un rappel de recalculer le classement de tous les enregistrements à l'aide de .order chaque fois qu'un enregistrement est enregistré ou détruit.

modifier :

une autre idée adaptée aux requêtes à enregistrement unique peut être vue ici