按两列分组,以获得独特的结果

时间:2013-11-18 18:18:32

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

我想将一个表中的结果分为两列:created_at p_id,我需要按p_id对其进行分组,因为我需要唯一的值,我尝试使用{{ 1}}为了做到这一点,但在我的情况下没有按我想要的方式工作。

distinct

但是我需要以不同的格式生成结果,为了得到这样的结果,我应该添加什么:Report.group("date(created_at)").group(:p_id).select("date(created_at) as created_at, count(*) as count, p_id") r = _ r.count will generate this: {[Mon, 18 Nov 2013, 11]=>1, [Mon, 18 Nov 2013, 8]=>1, [Mon, 18 Nov 2013, 13]=>1, [Mon, 18 Nov 2013, 12]=>3, [Mon, 18 Nov 2013, 10]=>1, [Mon, 18 Nov 2013, 7]=>1, [Mon, 18 Nov 2013, 3]=>1, [Mon, 18 Nov 2013, 2]=>1, [Mon, 18 Nov 2013, 9]=>1, [Mon, 18 Nov 2013, 14]=>1, [Mon, 18 Nov 2013, 6]=>1} 其中{Mon, 18 Nov 2013=>11}是上述sql语句生成的记录总数。 / p>

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您只想计算结果上显示日期的次数,可以通过简单的ruby代码执行此操作:

result = result.inject ({}) do |hash, el| 
  hash[el[0][0]] ||= 0
  hash[el[0][0]] += 1
  hash
}

假设结果是这样的:

{[date1, a] => b, [date1, c] => d, [date2, e] => f}

你会得到

{date1 => 2, date2 => 1}

如果您想获得与日期相关的count(*)值,请将总和调用更改为:

hash[el[0][0]] += el[1]

在这种情况下,你会得到:

{date1 => b+d, date2 => f}