我有一个User模型和一个Item模型。我想根据用户的价值对用户进行排名。我想做相当于这个查询:
SELECT rank() OVER (ORDER BY grand_total DESC), u.*, grand_total
FROM users AS u
JOIN
(SELECT user_id, SUM(amount) AS grand_total FROM items WHERE EXTRACT(YEAR FROM sold_at)='2012' GROUP BY user_id) AS i
ON u.id = i.user_id;
具体来说,我不知道如何加入我的选择。
答案 0 :(得分:1)
鉴于你描述的问题,我会编写查询:
select users.*, sum(items.amount) as rank
from users
join items on items.user_id = users.id
group by users.id
order by rank desc;
这将转化为AREL:
User.select('users.*, sum(items.amount) as rank').joins('join items on items.user_id = users.id').group('users.id').order('rank desc')
这有一个方便的副作用,您可以在生成的User对象上调用.rank
,并从查询中获取rank列的值,以防您需要显示它。
你有什么关于你的情况我不在这里,或者这会有用吗?