【问题标题】:ActiveRecord groupingActiveRecord 分组
【发布时间】:2013-11-13 14:06:23
【问题描述】:

我在project model 中有这个查询:

report = self.reports.group(:key_id)
report.select('key_id, count(*) as count')

我需要添加什么才能从 reports 表中获取另一列 (level)?

我尝试将我的列添加到select,但这意味着我也必须对其进行分组,并且我只想获取key_id 的唯一记录

谢谢

【问题讨论】:

  • 你能举一个你想要的输入和输出的例子吗?在 grouped_by 查询中选择的任何字段必须出现在 grouped_by 表达式中的 或聚合函数中的规则是 SQL 的基础。
  • 输出:[#<Report id: nil, key_id: 34>, #<Report id: nil, key_id: 14>.. 这就是我现在得到的,我想得到[#<Report id: nil, key_id: 34, level: 1> #<Report id: nil, key_id: 14, level 3>..,只有 key_id 应该是唯一的
  • 如果你的数据库中也有(比如)key_id: 34, level: 2 怎么办?它如何选择是显示level: 1 记录还是level: 2 记录?
  • 问题是我正在对记录进行计数,我想检查有多少唯一keys 的级别
  • 如果每个 key_id 只显示一条记录,那么如何计算它们?您需要按 key_id AND level 进行分组,然后计算结果,或者您需要在 level 上使用聚合函数。

标签: ruby-on-rails activerecord ruby-on-rails-3.2 ruby-on-rails-4


【解决方案1】:

如果您想包含有关另一个字段的信息,则必须将该字段包含在 group 表达式中或作为聚合字段的一部分。这是 SQL 的一个基本方面。

例如,如果要计算与每个 key_id 关联的 level 的各种值的出现次数,则可以添加 count(level) 列。聚合字段可以任意“花哨”,例如计算level 在您的评论中提到的各个波段内的出现次数。

【讨论】:

    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 2010-10-28
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    相关资源
    最近更新 更多