【问题标题】:ActiveRecord select records based on uniqueness of two attributes in combinationActiveRecord 根据两个属性组合的唯一性选择记录
【发布时间】:2014-08-15 20:57:08
【问题描述】:

我的桌子是这样的:

ID    |    Multiple    |    Itemlist_ID    |    Inventory_ID
----------------------------------------------------------------
1     |    1           |    1              |    1
2     |    1           |    1              |    2
3     |    1           |    1              |    3
4     |    1           |    4              |    2
5     |    1           |    4              |    3
6     |    2           |    4              |    2
7     |    2           |    4              |    3

如何检索具有MultipleItemlist_ID 的唯一组合的记录?例如下面:

ID    |    Multiple    |    Itemlist_ID    |    Inventory_ID
----------------------------------------------------------------
1     |    1           |    1              |    1
4     |    1           |    4              |    2
6     |    2           |    4              |    2

注意,这是为不显示 Inventory_ID 的视图检索,所以我不关心我是否会返回记录 [1,4,6][1,5,7][2,4,6]。使用first 命令很好。

【问题讨论】:

  • 检索结果中的第一个 Inventory_ID 是否重要?如果没有,您可以使用 GROUP BY (Multiple, Itemlist_ID)。
  • 不,我不关心inventory_ID,所以检索哪个并不重要。你是什​​么意思使用 GROUP BY?请举例?

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


【解决方案1】:

您可以使用以下语法在 Activerecord 中执行 GROUP BY 查询(将 Model 替换为您的类名):

Model.group('Multiple', 'Itemlist_ID').select('Multiple', 'Itemlist_ID')

这将检索 (Multiple, Itemlist_ID) 的所有唯一组合。

您可以选择在两个分组列之外的列上添加聚合操作,例如 SUM、AVG、COUNT 等。例如,如果您想知道每个组中有多少条记录:

Model.group('Multiple', 'Itemlist_ID').select('Multiple', 'Itemlist_ID', 'COUNT(1) AS group_count')

这将为结果添加一个名为“group_count”的属性,该属性将是每个组中包含的记录数

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多