ActiveRecord查询。按多个表中的多个列进行分组

时间:2017-04-19 23:59:07

标签: sql ruby-on-rails postgresql activerecord

Attendance.joins(:user).group(:email, :name).count

上面的查询给出了以下结果。 “用户1”有2个出席,“用户2”有6个出席,另外我可以访问用户名和电子邮件。

{["email@example.com", "User 1"]=>2, ["email2@example.com", "User 2"]=>6]}

这很棒,除非我真的想要包含User.id。我不能按ID分组,因为每条记录都是唯一的,而不是按电子邮件和名称分组。以下是我想要的:

{[1, "email@example.com", "User 1"]=>2, [2, "email2@example.com", "User 2"]=>6]}

任何帮助将不胜感激。

答案     Attendance.joins(:user).group(:email,:name,'attendances.user_id')。count

2 个答案:

答案 0 :(得分:1)

# collect required fields and group by email, name
grouped_attendance = Attendance.joins(:user).pluck(:id, :email, :name).group_by{|r| [r[1], r[2]]}

# calculate the counts
attendance_counts = grouped_attendance.each{|k,v| grouped_attendance[k] = v.count}

根据您的设置,但上面应该足够快,因为您没有实例化ActiveRecord对象。

答案 1 :(得分:0)

Attendance.joins(:user).group(:email,:name,' attendances.user_id')。count