带有Rails的Postgres窗口函数列

时间:2011-09-21 20:47:22

标签: ruby-on-rails postgresql activerecord

我想在我的一个列上使用rank()函数PostgreSQL。

Character.select("*, rank() OVER (ORDER BY points DESC)")

但是由于我的表中没有rank列,因此rails不包含查询。什么是获得我的ActiveRecord对象中的排名的正确方法?

1 个答案:

答案 0 :(得分:4)

试试这个:

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

它应该返回具有rank属性的Character对象,如 here 所示。但是,这可能不是数据库无关的,如果你传递对象,往往会变得混乱。

另一个(昂贵的)解决方案是在您的表中添加一个排名列,并且每当保存或销毁记录时,使用.order重新计算所有记录的排名。

编辑

另一种适用于单一记录查询的想法可以见 here