微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rails 3 ActiveRecord:顺序和按关联计数分组

如何解决Rails 3 ActiveRecord:顺序和按关联计数分组

您正在寻找的内容与标准ActiveRecord查询的映射并不理想。

您可以调用直接sql来最有效地获取所需内容

subquery = Song.joins(:listens).group(:id).select("songs.id, COUNT(*) as listen_count).to_sql
raw = Song.connection.select_rows("SELECT listen_count, COUNT(*) FROM (#{subquery}) t GROUP BY listen_count ORDER BY listen_count DESC")
song_listen_distribution = Hash[raw]

另外,您可以使用ActiveRecord查找所有歌曲的计数,然后在ruby中建立发行字典:

song_listens = Song.joins(:listens).group(:id).count
song_listen_distribution = song_listens.group_by{|n| n.last}.
    each_with_object({}){|(k, g), h| h[k] = g.size}

解决方法

给定模型所在的相同场景

Song has many :listens

我想按收听次数对歌曲进行分组。我的目标是查看歌曲与听音的分布情况。就像是…

song_listen_distribution = {0 => 24,1 => 43,2=>11,... MAX_LISTENS => 1}

这样就song_listen_distribution[4]可以返回听过4次的歌曲数量。

上面链接问题的公认答案非常接近我,但是我无法按“ songs.listens_count”分组

    Song.select("songs.id,OTHER_ATTRS_YOU_NEED,count(listens.id) AS listens_count").
    joins(:listens).
    group("songs.listens_count").
    order("listens_count DESC")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。