【问题标题】:How to handle group by automatically with PGSQL?如何使用 PGSQL 自动处理 group by?
【发布时间】:2010-09-24 16:22:16
【问题描述】:

我必须对我的数据库进行计算。以前用mysql的时候没问题,但是现在用PGSQL的时候,发现如下问题:

我有 3 个表:dogs、users 和 dogs_users,连接表(这是一个 n-n,每只狗可以有多个用户,每个用户可以有多个狗)

当我执行以下操作时:

ree-1.8.7-2010.02 > User.first.dogs.group(:name).average(:number_of_fleas)

ActiveRecord::StatementInvalid: PGError: ERROR:  column "dogs.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT     "dogs".*, AVG("dogs"."number_of_fleas") AS "avera...
                   ^
: SELECT     "dogs".*, AVG("dogs"."number_of_fleas") AS "average_number_of_fleas", name AS name FROM       "dogs"  INNER JOIN "dogs_users" ON "dogs".id = "dogs_users".dog_id WHERE     (("dogs_users".user_id = 1)) GROUP BY  name

我发现解决此问题的唯一方法是执行以下操作:

Dog.where(:id => User.first.dogs.map(&:id)).group(:name).average(:number_of_fleas)

而且这不是很可读也不是很优化...

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    如果您不关心返回的多个值中的哪一个,您可以使用 distinct on:

    select distinct on (col1, col2) col1, col2, col3 from sometable;

    请注意,您可以在此处获取 col3 的任何值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多