我想将一个表中的结果分为两列: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>
谢谢。
答案 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}