gpt4 book ai didi

sql - Rails 根据相关模型的属性对模型进行排序

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

给定以下模型:

团队.rb

class Team < ActiveRecord::Base
has_many :events, :dependent => :destroy
has_many :challenges, :through => :events

validates :name, :presence => true, :uniqueness => true
end

挑战.rb

class Challenge < ActiveRecord::Base
has_many :events, :dependent => :destroy
has_many :teams, :through => :events

validates :name, :presence => true, :uniqueness => true
validates :flag, :presence => true, :uniqueness => true
end

事件.rb

class Event < ActiveRecord::Base
belongs_to :team
belongs_to :challenge

validates :team, :presence => true
validates :challenge, :presence => true
end

我想显示“等级”最高的球队。排名最高的团队完成的挑战最多(事件)。如果在 X 场比赛中出现平局,则完成第 X 场比赛的球队第一具有最高等级。

因此我可以轻松地根据事件数量对团队进行排序,然后显示它们。

像这样:

def index
@teams = Team.includes(:events).
select("*, COUNT(events.id)").
group("teams.id, events.id").
order("COUNT(events.id) DESC")
end

但是我不知道如何处理平局的情况。有人知道使用 SQL 执行此操作的好方法吗?

我宁愿使用 SQL 来执行此操作,也不愿执行额外的步骤在应用服务器上。

谢谢!!

最佳答案

你可以试试这个:

 @teams = Team.includes(:events).
select("*, COUNT(events.id) AS event_count, MAX(events.created_at) AS last_event_created_at").
group("teams.id, events.id").
order("event_count DESC, last_event_created_at ASC")

关于sql - Rails 根据相关模型的属性对模型进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941034/

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