ruby - 在 PostgreSQL 中按指定列分组

标签 ruby ruby-on-rails-3 postgresql group-by

也许,这个问题有点傻,但我很困惑。

如何按指定列对记录进行分组? :)

Item.group(:category_id)

不工作...

它说:

ActiveRecord::StatementInvalid: PGError: ERROR: column "items.id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT "items".* FROM "items" GROUP BY category_id

我应该使用什么样的聚合函数?

请您提供一个简单的示例。

最佳答案

您必须定义如何对共享相同 category_id 的值进行分组。连接它们?计算总和?

要创建以逗号分隔的值列表,您的语句可能如下所示:

SELECT category_id
      ,string_agg(col1, ', ') AS col1_list
      ,string_agg(col2, ', ') AS col2_list
FROM   items
GROUP  BY category_id

string_agg(col1, ', ') 需要 Postgres 9.0 或更高版本. 在旧版本中,您可以用 array_to_string(array_agg(col1), ', ') 代替。更多聚合函数here .

与在客户端中聚合值相比,在 PostgreSQL 中聚合值显然是更好的方法。 Postgres 在这方面非常快并且它减少了(网络)流量。

关于ruby - 在 PostgreSQL 中按指定列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8575740/

相关文章:

xml - 使用外键将表加载到 PostgreSQL 会产生错误

ruby-on-rails - Devise/users/sign_in 重定向到错误的 Controller

MySQL数据类型SET与rails

ruby-on-rails - Windows 8.1 上的 Ruby、Rails 开发环境

ruby-on-rails-3 - 什么是 Rails 中的测试/暂存环境

ruby-on-rails - SimpleForm 2 : input tags inside a wrapper

sql - PostgreSQL 中基于时间戳的移动平均线

sql - Ruby 数组作为普通 SQL 查询的参数

ruby - 如何通过 belongs_to 按外部 id 和本地属性进行过滤?

ruby-on-rails - rails 自定义验证在应该的时候不会失败