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      |

私は、現在のマークの数とともに、それぞれの一意の日付を持つデータセットを作成しようとしています (最終的には、毎日の出席を正確に表すために、2 で割った値になります)。

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 }

後ですべての合計を2で割ることができます。

于 2012-08-06T13:06:34.500 に答える