我有一个任务模型,具有像created_at,小时和不同状态,我想按月汇总并总结不同的状态。按单个表上的查询进行分组总结
| Month | Count | Hours | States
| 2012-01 | 22 | 26.5 | new(3), closed(4), others(15)
| 2012-02 | 12 | 16.5 | new(0), approved(2), closed(9), others(1)
...
当前我正在使用此查询按月分组,并给我数+小时。
@tasks = Task.select("date(created_at), count(id), sum(hours) AS hours")
.group("MONTH(created_at)")
.order('created_at')
我如何在所有不同的状态上添加总和?
我已阅读关于group_by,但我不认为这是很好的结果。
更新
有了这样我得到了几乎是我想要的查询。
@tasks = Tasks.select("date(created_at), state, count(state), sum(hours) AS hours")
.group("MONTH(created_at)")
.group("state")
.order('created_at')
| Month | Count | Hours | State
| 2012-01 | 3 | 26.5 | new
| 2012-01 | 4 | 16.5 | approved
| 2012-01 | 15 | 22.5 | others
| 2012-02 | 2 | 16.5 | approved
| 2012-02 | 9 | 16.5 | closed
...
UPDATE2
我有一个SQL查询,让我结果,我需要。
@tasks = Task.select("
DATE(created_at) AS month,
COUNT(state),
SUM(hours) AS hours,
COUNT(case when `state` = 'new' then `state` else NULL end) AS state_new,
SUM(case when `state` = 'new' then `hours` else NULL end) AS state_new_hours,
COUNT(case when `state` = 'approved' then `state` else NULL end) AS state_approved,
SUM(case when `state` = 'approved' then `hours` else NULL end) AS state_approved_hours,
COUNT(case when `state` = 'closed' then `state` else NULL end) AS state_closed,
SUM(case when `state` = 'closed' then `hours` else NULL end) AS state_closed_hours,
COUNT(case when `state` != 'new' AND `state` != 'approved' AND `state` != 'closed' then `state` else NULL end) AS state_misc")
.group("MONTH(created_at)")
.order('created_at')
这可以通过加入来完成吗?如何以更常用的导轨方式来处理这种情况,并具有动态状态使用情况?
您是否拥有一组固定的状态 - 因此只有'新','封闭','其他'可能,或者它们是否会增长? – Vapire 2012-04-01 17:17:59
它可能获得新的状态,但我知道它们。所以某种固定的。 – tonymarschall 2012-04-01 17:31:26