查询输出模型中每个字段的唯一记录数?

时间:2011-05-08 02:30:55

标签: ruby-on-rails ruby-on-rails-3 activerecord

给出类似的模型:

Contact (id, user_id, xxx, xxxxxxx)

我想在Contact模型中输出一组唯一的user_id记录?关于如何写这个的任何想法?

由于

2 个答案:

答案 0 :(得分:3)

在SQL中有几种方法可以做到这一点,但是如果你想尽可能多地保持ActiveRecord提供的ORM,我认为以下是你最接近的:

@user_ids = Contact.select('DISTINCT user_id').all
然后,

@user_ids将是联系人表中记录引用的所有用户ID的数组。如果您想知道有多少人可以拨打@user_ids.count


更新:另一种方法是提供更多信息,而无需实例化每个对象并避免编写SQL的开销如下:

Contact.group('user_id').count  #=> { 1 => 3, 2 => 4, 3 => 10 }

如您所见,响应是一个散列,其中用户ID作为键,每个用户的数量作为值。您可以使用另一个.count获取唯一用户ID的数量:

Contact.group('user_id').count.count  #=> 3

答案 1 :(得分:2)

以下是一些替代方法:

Contact.count('user_id', :distinct => true)
# SELECT COUNT(DISTINCT "contacts"."user_id") FROM "contacts"

Contact.count('DISTINCT user_id')
# SELECT COUNT(DISTINCT user_id) FROM "contacts"