【问题标题】:Get all columns of each distinct records in rails获取rails中每个不同记录的所有列
【发布时间】:2016-03-23 13:52:56
【问题描述】:

我想在 rails 中获得不同的记录。 为此我看到了这个 Rails: how can I get unique values from column

但问题是通过这个解决方案我只能得到 Ids 。

ViewsLog.uniq.pluck(:unit_id)
[24, 21, 23, 4, 16, 5, 7]

我想要 uniq unit_id 的所有列

【问题讨论】:

  • 基于什么的不同记录?你的模型是什么样的?
  • 我的模型是 ["id", "user_id", "unit_id", "unit_type", "is_billed", "created_at", "updated_at", "user_credit", "deleted_at", "campaign_id "] 我想要 unit_id 上的所有不同记录

标签: mysql ruby-on-rails ruby activerecord


【解决方案1】:

您可以使用group;它为您提供所有不同的记录:

 ViewsLog.group(:unit_id)

【讨论】:

  • 它只适用于主键吗?因为当我这样做时它会给出一个错误 G::GroupingError: ERROR: column "surveys.id" 必须出现在 GROUP BY 子句中或在聚合函数中使用
  • 如果您使用primary_key,则没有机会再次重复相同的 id n 再次由数据库处理。并且适用于所有类型的列
  • NO NO 这不是主键
  • @HaseebAhmad 您使用的是哪个数据库??我认为您正在尝试选择查询中不存在的其他列
  • Postgresql...不,我写了同样的查询
【解决方案2】:

可以在rails中获取不同的记录

ViewsLog.distinct(:unit_id)

如果你正在使用 postgres 并且在表中有 json 类型,那么需要像下面这样写

ViewsLog.select('distinct on (views_logs.unit_id) views_logs.*')

因为如果您的表中存在 json 类型,postgres 不支持区分。

【讨论】:

  • distinctrails 3.2 中给出错误,该功能支持哪个版本的rails??
  • ViewsLog.select('distinct on (views_logs.unit_id) views_logs.*') 在 Rails 6.0.3.1 中也不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 2014-12-30
  • 2014-11-16
相关资源
最近更新 更多