如何计算Rails中表中的唯一值?

时间:2014-06-04 14:30:17

标签: ruby-on-rails activerecord

我有一个表“stock”,其中包含许多package_ids

package_id = 1  
package_id = 3  
package_id = 2  
package_id = 3  
package_id = 3  
package_id = 4  
package_id = 2

最优雅的方式是什么:

  • 计算db中的每个唯一package_id,例如:package_id 1 =一次 在数据库中; package_id 2 = db中的两次; package_id 3 =三 DB中的时间......
  • 之后回复包ID的前3位

我已经一步一步地尝试过:

  • 计算每个package_id(Stock.where(:package_id => 1).count)
  • 将所有内容放入数组
  • 并将该数组从高到低排序(仅前3项)

然而,这似乎并不是一条有效的道路。

2 个答案:

答案 0 :(得分:5)

怎么样:

Stock.group(:package_id).count

它将返回一个散列,其中package_id为键,count为值:

{ package_id1: count1, package_id2: count2 ....}

答案 1 :(得分:4)

尝试使用此功能获得前三名'

Stock.select('package_id, count(*) as c').group(:package_id).order('c DESC').limit(3)