我有一个考勤表,我正在尝试查询,以便创建一个我可以用图表绘制的数据集。我的表存储出勤信息如下:
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")
但是这个结果哈希不包括根本没有现有标记的日期。我将如何实现这一目标?
答案 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。