sql - 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)
这将为您提供Model
sms
并且每个都将有一个额外的Devices
方法,该方法将为您提供设备字符串数组。
或者你可以使用string_agg
:
ms = Model.select('"Name", "Office", string_agg("Device", ',') as "Devices"').group(:Name, :Office)
并且这些Devices
方法将为您提供字符串而不是数组。
这些都不保证聚合的任何特定顺序,但如果需要,您可以指定顺序:
array_agg("Device" order by "Device")
string_agg("Device", ',' order by "Device" desc)
推荐阅读
- go - Go 中的“值语义”和“指针语义”是什么意思?
- javascript - data-ng-repeat 标记为注释
- r - 从 R 中的 SQLite 中的表中收集()
- sql-server-data-tools - 使用 DacServices.Deploy 发布 DACPAC (SSDT) 期间的执行超时错误
- php - PHPUnit 未定义的方法调用
- python - python中的文件路径错误
- java - 在数据框 spark 1.6 java 中将字符串转换为日期或整数
- python - 如何对 csv.writer 返回的对象进行类型注释?
- javascript - 单击子菜单页面时如何发出ajax请求?
- sql - regexp_replace 和 regexp_substr 变量的比较