gpt4 book ai didi

ruby-on-rails - 使用我的排行榜。可以最大限度地减少工作量

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:03 26 4
gpt4 key购买 nike

我有统计模型:

Stat(id: integer, points: float, user_id: integer, match_id: integer, team_id: integer)

对于匹配模型:

 Match(id: integer, team_a_id: integer, team_b_id: integer)

现在这是我的代码:

stat= Stat
.group(:user_id)
.select("user_id, count(*) as matches_count, sum(points) as score")
.where.not(points: 0)
.where.not(match_id: nil)

stat.each do |f|
new_value = (f.sum_points.to_f / f.matches_count.to_f)
f.sum_points = new_value.round(2)
a << f
end

new_stat = a.sort_by(&:sum_points).reverse.first(10).flatten

我必须更改每个数据的 sum_points 的值,如果我得到大量数据会花费时间怎么办?有没有办法将其最小化?我需要的是前 10 名。

最佳答案

最有效的方法是使用 sql 计算数据并只检索前 10 个。

基本上,现在您正在手动解析整个事件记录数组以计算 sum_points,然后您正在对所有数据进行排序和反转以检索前 10 名。正如您所说,当大量数据将存储在数据库中。

这是我的解决方案,它将仅使用 sql 查询来计算和检索前 10 个:

stat = Stat.group(:user_id)
.select("user_id, round((sum(points) /count(*)), 2) as sum_points")
.where.not(points: 0).where.not(match_id: nil).order("sum_points DESC").first(10)

关于ruby-on-rails - 使用我的排行榜。可以最大限度地减少工作量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52287819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com