在我的 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/