sql - Activerecord 将具有相同列值的行合并为一个

标签 sql ruby activerecord

在我的 Rails 应用程序中,我试图合并来自多行的数据。

我的表格如下所示。

Name    Office   Device
-----   ------   ------- 
USR-A    LA-HQ    MACBOOK
USR-B    LA-HQ    MACBOOK
USR-A    LA-HQ    IMAC
USR-B    NY-HQ    IMAC
USR-B    NY-HQ    IPHONE

我希望数据如下所示

Name    Office   Device
-----   ------   ------- 
USR-A    LA-HQ    MACBOOK, IMAC
USR-B    LA-HQ    MACBOOK
USR-B    NY-HQ    IMAC, IPHONE

最佳答案

使用 PostgreSQL 的一种简单方法是使用 array_agg :

ms = Model.select('"Name", "Office", array_agg("Device") as "Devices"').group(:Name, :Office)

这将在 ms 内为您提供 Model,并且每个都有一个额外的 Devices 方法,该方法将为您提供设备字符串数组。

或者你可以使用string_agg:

ms = Model.select('"Name", "Office", string_agg("Device", ',') as "Devices"').group(:Name, :Office)

Devices 方法将为您提供字符串而不是数组。

这些都不能保证聚合的任何特定顺序,但您可以 specify the order如果你想要一个:

array_agg("Device" order by "Device")
string_agg("Device", ',' order by "Device" desc)

关于sql - Activerecord 将具有相同列值的行合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332298/

相关文章:

ruby-on-rails - Rails 上的 build 和 new 有什么区别?

PHP 解析错误?

sql - 在另一个表中插入行时如何自动增加一个表中的值

mysql - 是否可以从 Oracle 数据库调用 MySQL 存储过程?

ruby-on-rails - lovdbyless VS 社区引擎……哪个最好?

ruby - 方法调用参数中的冒号 - Ruby

ruby-on-rails - Activerecord 返回匹配数组中所有属性的对象

java - hibernate : No Dialect mapping for JDBC type: 101

ruby - Heroku:找不到 Rake 文件

ruby-on-rails - ActiveRecord 与 SQL 原始查询?