ActiveRecord查询GROUP和COUNT个零值

时间:2012-08-06 12:58:24

标签: ruby-on-rails activerecord

我有一个考勤表,我正在尝试查询,以便创建一个我可以用图表绘制的数据集。我的表存储出勤信息如下:

date       | student_id | present | session |
-----------|------------|---------|---------|
2012-09-01 | 1          | 1       | AM      |
2012-09-01 | 1          | 1       | PM      |
2012-09-01 | 2          | 0       | AM      |
2012-09-01 | 2          | 1       | PM      |
2012-09-02 | 1          | 0       | AM      |
2012-09-02 | 1          | 0       | PM      |
2012-09-02 | 2          | 0       | AM      |
2012-09-02 | 2          | 0       | PM      |

我正在尝试最终得到一个数据集,该数据集包含每个唯一日期,以及当前标记的数量(最后除以2,以便准确表示每天的出勤率)。

2012-09-01 | 3 (1.5)
2012-09-02 | 0 (0)

到目前为止,这是我最接近的

AttendanceMark.group(:date).count(:conditions => "present = 1")

但是这个结果哈希不包括根本没有现有标记的日期。我将如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

如果分别使用0和1表示存在和不存在,则可以构建类似

的查询
# For MySQL
AttendanceMark.group(:date).sum('CASE present WHEN TRUE THEN 1 ELSE 0 END')

# For SQLite
AttendanceMark.group(:date).sum('CASE WHEN present = "t" THEN 1 ELSE 0 END')

这将返回

{ "2012-09-01" => 3, "2012-09-02" => 0 }

您可以稍后将所有金额除以2。