0

我有一个Payment5 行的模型。其中 4 个具有相同的 user_id 和一个不同的。我尝试按 user_id 对这些结果进行分组。它应该返回两个结果,但是在尝试这个时我总是得到五个结果。知道为什么吗?

(我正在使用 Postgres)

Payment.find(:all, group: "user_id,id").count
=> 5 

也试过

Payment.find(:all, group: "id,user_id").count
=> 5 

更新:如果我不添加“user_id”,我会收到此错误

ActiveRecord::StatementInvalid: PG::Error: ERROR:  column "payments.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT "payments".* FROM "payments"  GROUP BY user_id
               ^
: SELECT "payments".* FROM "payments"  GROUP BY user_id

更新 2:此查询

Payment.joins(:user).select('payments.id,users.username,payments.user_id,payments.token,payments.period_start_at,payments.amount_cents,payments.currency').group("user_id")

返回PG::Error: ERROR: column "payments.id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT payments.id,users.username,payments.user_id,payments.... ^

如果我将“payments.id”添加到组子句中,它将不会按 user_id 对它们进行分组。任何想法?

4

2 回答 2

1

好吧,您无法按 对它进行分组id,因为id可能是serial您桌子上的唯一键。仅按 分组user_id

更新

Aparently你正在使用rails v 2.3.*什么的。此外,这是数据库知识。中的查询SQL将是这样的:

SELECT COUNT(user_id), user_id FROM payments GROUP BY user_id
#=> user_id | count
    10        2
    3         1
    4         10

这将为您提供某些用户的付款次数。要将其转换为ActiveRecord查询,您必须执行以下操作:

Payment.count(:group => :user_id)
于 2013-08-26T14:45:39.850 回答
0

您按 分组idid是独一无二的。您必须有 5 个组,每组有一条记录。您不能(有意义地)按 分组id

您还使用了非常过时的find(:all, ...)语法。改为使用Payment.group("user_id")

于 2013-08-26T14:45:32.333 回答