我需要按照模型的Points
列中的值对Rails 4中的表中的记录进行排序。
这部分很简单,但我还有一个额外的复杂性:我希望在此类之前使用。sum
来匹配user_id
的所有值。换句话说,我希望.order
属于用户的总分,其中可能包含多个值。
首先,为了生成一般订单,我尝试了:
@orders = Point.order(points: :desc)
@total = @orders.sum(:points)
这会在此表中生成一般值。但是,我想在执行@orders之前使用.sum
添加匹配user_id
的值。
为了更清楚,这是 Points.rb 表的样子。
Points.rb表格示例
|user_id: 1| points: 10 | game_id 3|
|user_id: 1| points: 20 | game_id 2|
|user_id: 2| points: 50 | game_id 3|
|user_id: 3| points: -10 | game_id 1|
这是否可以使用mysql进行分组,求和,然后排序而无需在原始表中创建新的聚合值?
答案 0 :(得分:1)
您可以尝试下一个查询:
Point.order(points: :desc).group(:user_id).sum(:points)
#=> {2 => 50, 1 => 30, 3 => -10}
此代码生成SQL下一个查询:
SELECT SUM(
points
。points
)AS sum_points,user_id AS user_id FROMpoints
GROUP BYpoints
。user_id
ORDER BYpoints
。points
DESC
答案 1 :(得分:-2)
我假设用户有很多分数&您的积分表包含一个名为" point"的列,因此您的控制器代码应类似于以下内容:
@user = User.all
@user.each do |u|
puts u.points.sum(:point)
end