1

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

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      |

我试图最终得到一个数据集,其中包含每个唯一日期以及当前标记的数量(最终除以二,以准确表示每天的出勤情况)。

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

这是迄今为止我得到的最接近的

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

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

4

1 回答 1

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 }

您可以稍后将所有总和除以二。

于 2012-08-06T13:06:34.500 回答