mysql - 如何获得一组记录的总和?

标签 mysql ruby-on-rails postgresql ruby-on-rails-3.1 rails-postgresql

我对 rails 和 sql 都比较陌生。我在生产环境中使用 postgres。

我有一个 Like 模型,通过多态性,它有属性 likeable_typelikeable_id,这就是我的 Photo 中的项目 模型被用户“喜欢”。当喜欢的对象将 Photo 作为 likeable_type 并且照片的 id 为likeable_id

我的问题:我希望能够获得过去 24 小时内点赞次数最多的照片列表,按顺序将最喜欢的放在顶部,最不喜欢的放在底部。我该怎么做?

到目前为止我知道我的代码应该是这样的

likes = Like.find(:all, :conditions => { :created_at => 1.days.ago.utc...Time.now.utc, :likeable_type => "Photo" })
likes = likes.group( --- something here --- , SUM( --- something here --- ))

但我不太清楚正确的语法应该是什么。

非常感谢任何帮助!

最佳答案

假设您有以下内容:

class Photo < AR::Base
  has_many :likes, :as => :likeable
end


class Like < AR::Base
  belongs_to :likeable, :polymorphic => true
end

尝试:

@photos = Photo.select("photos.*, count(likes.id) AS likes_count").joins(:likes).where('likes.created_at > ?', 1.day.ago).group('photos.id').order('likes_count DESC')

这还允许您访问每张照片的赞数:

@photo.first[:likes_count] # => 4

关于mysql - 如何获得一组记录的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8079286/

相关文章:

ruby-on-rails - 在 JSON 响应中包含图像的 ActiveStorage URL?

r - 带加权中位数的数据透视表

mysql - 验证 INNER JOIN 中的所有行都具有值

mysql - 关联同一个表中的两列

php - 如何通过 php 将这些数据从 mysql 插入到我的网页中?

php - 无法搜索短名称的名称

ruby-on-rails - 获取字段最大值的对象[Mongoid]

javascript - 未捕获的 TypeError : Masonry. init 不是函数

sql - TypeScript Sequelize : How to join two tables with common

regex - PostgreSQL 数字匹配正则表达式的奇怪行为