Rails activerecord:总和、最大值和连接

2023-12-30

我有两个型号users and posts。用户可以投票和查看帖子

#users
  id
  name

#posts
  id
  count_votes
  count_views
  users_id
  created_at
  updated_at

我想要的是过去 24 小时内其帖子获得最多投票和浏览次数最多的用户。观看次数和得票数最多的获胜。

我尝试过的我有这个 SQL 查询,它很好,但我想让用户获得最大票数,这个查询给了我所有用户,但我不知道如何添加 count_views

select u.name as "Name", sum(p.count_votes)
from posts p 
inner join users u on p.user_id = u.id 
where p.created_at >= DATE_SUB(NOW(), INTERVAL 1 day)
group by user_id;

ActiveRecord 版本

Post.select("users.id, sum(posts.count_votes) as nb_votes")
.joins(:user).where("posts.created_at >= ?", 1.day.ago.beginning_of_day)
.group("posts.user_id")

# Results on IRB
=> #<ActiveRecord::Relation [#<Post id: 1>, #<Post id: 3>]> 

如何将这两个和的总和和最大值结合起来?有没有办法拥有 activerecord 代码或只有原始 SQL ?


您当前的查询对用户进行分组。因此,您将在输出中为每个用户获得一条记录。通过将输出限制为仅 1 条记录并按投票数+浏览量总数排序,您可以获得排名靠前的用户。

Raw SQL:

select u.id, sum(p.count_votes + p.count_views) total
from posts p 
inner join users u on p.user_id = u.id 
where p.created_at >= DATE_SUB(NOW(), INTERVAL 1 day)
group by u.id
order by total DESC
limit 1 ;

ActiveRecord 版本:从您的 User 模型开始,因此您将在输出中获得用户对象而不是 Post 对象,就像您在问题中提到的那样。

User.select("users.id, sum(posts.count_votes + posts.count_views) as nb_votes")
.joins(:post).where("posts.created_at >= ?", 1.day.ago.beginning_of_day)
.group("posts.user_id").order("nb_votes DESC").limit(1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails activerecord:总和、最大值和连接 的相关文章

随机推荐

  • 将 JSON 文件中的对象扁平化为 Swift 中的嵌套对象结构[重复]

    这个问题在这里已经有答案了 给定一个具有嵌套对象结构的 JSON 对象 如下所示 users user name Adam age 25 address city Stockholm country Sweden user name Lil
  • 如何使用python读取两列

    如何读取两列 第一列包含字母 第二列包含值 C0 0 158040 C1 0 157117 C2 0 143805 C3 0 140561 S4 0 059175 H5 0 128940 H6 0 129007 H7 0 142421 H8
  • Flask JSONEncoder 将 Ensure_ascii 设置为 False

    我正在开发一个小型烧瓶应用程序 在其中我想返回包含变音符号的字符串 一般是德语特殊字符 例如 作为默认值JSONEncoder烧瓶中有ensure ascii True 这总是会转换我的字符串 Hauptstra e 213 to this
  • 如何在android中将数字转换为货币格式

    我想以货币格式和单独的数字显示我的号码 如下例所示 1000 gt 1 000 10000 gt 10 000 100000 gt 100 000 1000000 gt 1 000 000 Thanks 另一种方法 NumberFormat
  • 如何禁用全局系统变量在重启MySQL后重置?

    我想禁用ONLY FULL GROUP BY的价值sql mode永久甚至重新启动 MySQL 服务器 以下是我尝试过但不起作用的事情 重启MySQL时设置为默认值 保留的设置是永久性的 它们适用于服务器重新启动 set PERSIST s
  • 设置 JSeperator 的宽度

    我正在尝试找出如何增加 JSeparator 的线条粗细 我尝试的一切似乎都不起作用 而且我似乎无法在 API 中找到解决方案 这是代码 import org apache commons lang3 ArrayUtils import j
  • 如何清除 Facebook 共享器缓存?

    我们使用了链接 http www facebook com sharer php u shared URL 共享特定页面 但是 Facebook Sharer 使用图像和标题的缓存版本 有没有办法快速清除 Facebook 缓存 或者我们需
  • mysql - 当表 2 上删除特定行时在表 1 中插入行

    当使用触发器 mysql 在表 2 上删除特定行时 我决 定在表 1 中插入行 出现此错误 MySQL said 1363 There is no NEW row in on DELETE trigger 我怎样才能做到这一点 考虑以下示例
  • 将 XML 发送到 JMS 时我应该使用 TextMessage 还是 BytesMessage

    我在网上发现了一些非常矛盾的信息 我认为每个不同的 JMS 提供商也可能会改变答案 我试图了解将 XML 发送到 JMS 系统 例如 ActiveMQ 时是否应该使用 BytesMessage 我可以保证 XML 被正确序列化 并且前导码将
  • QML2 ApplicationWindow 键处理

    有没有办法处理ApplicationWindow中的按键事件QtQuick Controls成分 Qt5 3 的文档没有提供任何方法来做到这一点 另外 它说Keys只存在于Item 对象 当我尝试处理按键事件时 它显示 无法将 Keys 属
  • Node.js 是否有相当于 Python 的 subprocess.run 的东西?

    我正在寻找从node js 执行shell 命令 我希望标准输出显示到终端 在 python 中 我可以使用 subprocess run 来做到这一点 在node js中 我看到child process exec 但这会返回标准输出的缓
  • Visual Studio 2013 Github 提交死锁

    我和几个朋友正在通过 GitHub 开发一个项目 我们都共享同一个分支 这可能是也可能不是一个好主意 我编辑了一些代码并提交了更改 我将提交推送到 GitHub 我正在使用 Visual Studio 2013 它是内置的 Git 工具 但
  • 缓冲参数在 Dapper dot net 中起什么作用?

    精致的点网有一个buffer参数 布尔值 但据我所知only它所做的就是在返回结果之前将结果转换为列表 根据文档 https github com StackExchange Dapper buffered vs unbuffered re
  • Grid.IsSharedSizeScope 和 ItemsControl.ItemTemplate 的 WPF 布局问题

    我正在尝试使用 Grid IsSharedSizeScope 将 ItemsControl 显示的数据绑定控件排列在网格第一列中的一些控件旁边 问题是我无法阻止控件不断垂直增长 如何在不设置 MaxHeight 属性的情况下阻止他们这样做
  • TouchUpInside 事件后无法将 UIButton 保持在选定状态

    我需要一个 UIButton 来保持按下状态 基本上 如果按钮处于正常状态 我想触摸该按钮 它会突出显示其标准蓝色 然后在抬起手指后保持蓝色 我制作了以下 UIAction 并将按钮 Touch Up Inside 事件连接到它 IBAct
  • 为什么有人会创建额外的局部变量只是为了在其上添加最终关键字?

    我遇到过类似这样的代码 public void foo String param1 final String param1F param1 我怀疑作者不知道他可以将 Final 关键字直接放在方法签名中 因为在方法的其余部分中他只使用 pa
  • 初始化向量的特征

    我绝不是密码学专家 我一直在 Stack Overflow 和维基百科上阅读一些问题 但在定义 IV 及其用法方面没有什么是真正 明确的 我发现的几点 IV 被添加到明文消息中以加强加密 IV 是真正随机的 每条消息都有自己独特的 IV 有
  • 使用 Jersey 客户端在 POST 中发送名称值对

    我如何将名称值对作为正文传递给泽西岛的 POST ReST 服务 类似于下面使用 Apache Commons PostMethod 的代码 final PostMethod post new PostMethod url post set
  • 为什么正则表达式的运行时间可以呈指数级增长?

    可以编写在某些情况下需要指数运行时间的正则表达式 这样的例子是 aa aa 如果有奇数个输入a它需要指数级的运行时间 测试这个很容易 如果输入仅包含as 且长度为 51 正则表达式需要几秒钟的时间来计算 在我的机器上 相反 如果输入长度为
  • Rails activerecord:总和、最大值和连接

    我有两个型号users and posts 用户可以投票和查看帖子 users id name posts id count votes count views users id created at updated at 我想要的是过去