J'ai la requête suivante:Postgres Rang Comme colonne
SELECT name, rank() OVER (PARTITION BY user_id ORDER BY love_count DESC) AS position FROM items
Et je voudrais maintenant faire une clause where sur le rang() fonction:
SELECT name, rank() OVER (PARTITION BY user_id ORDER BY love_count DESC) AS position FROM items WHERE position = 1
C'est, je veux pour interroger l'élément le plus aimé pour chaque utilisateur. Cependant, il en résulte:
PGError: ERROR: column "position" does not exist
Aussi, j'utilise Rails AREL pour le faire et je voudrais permettre chaîner. C'est le code Ruby qui crée la requête:
Item.select("name, rank() OVER (PARTITION BY user_id ORDER BY love_count DESC) AS position").where("position = 1")
Des idées?
+1 Pour performance. Je ne sais pas exactement pourquoi, mais le CTE semble être environ 2x plus rapide que la jointure imbriquée dans la réponse acceptée. – Keyo
@Keyo: Avez-vous comparé les plans d'exécution? –