2010-12-29 8 views
1

はここだ、私が求めているものを理解しやすくするには、以下の私の質問のためのサンプルコンテキストのビット...結合を使用するARelクエリで動的集約カラムを構築することは可能ですか?

スキーマ

Users 
- id 
- name 

Answers 
- id 
- user_id 
- topic_id 
- was_correct 

Topics 
- id 
- name 

データ

Users 
id | name 
1 | Gabe 
2 | John 

Topics 
id | name 
1 | Math 
2 | English 

Answers 
id | user_id | topic_id | was_correct 
1 |  1 |  1 | 0 
2 |  1 |  1 | 1 
3 |  1 |  2 | 1 
4 |  2 |  1 | 0 
5 |  2 |  2 | 0 

何結果セットでは、ユーザーあたり1行、トピックごとに2つの列があり、トピックの正解の合計を示す表が1つあります。そのトピックの間違った回答の合計を示すもの。上記のサンプルデータでは、この結果セットは、次のようになります。

users.id | users.name | topic_1_correct_sum | topic_1_incorrect_sum | topic_2_correct_sum | topic_2_incorrect_sum 
     1 | Gabe  | 1     | 1      | 1     | 0 
     2 | John  | 0     | 1      | 0     | 1 

もちろん、トピックテーブル内の複数のトピックがあった場合

私の望ましい結果、私は新しいを含めるには、このクエリを希望しますcorrect_sumとwrong_sumsが存在するので、私はselect_clauseのsum関数にtopic_idsをハードコーディングせずにこれを書く方法を探しています。

ARelでこのようなことを魔法にするスマートな方法はありますか?

答えて

0

ゲイブ、

あなたはここで探しているものをクロス集計クエリです。これを書くには多くのアプローチがありますが、残念ながらSQLで十分に一般的なものはありません。 AFAIK各データベースはクロス集計を別々に処理します。これを見るもう1つの方法は、OLTPタイプのデータベース(OLTPとは対照的)に通常見られる "キューブ"のようなものです。

SQLには簡単に書き込むことができますが、使用しているデータベースのネイティブ関数が含まれている可能性があります。どのDBを使用していますか?

あなたの回答テーブルは、1,2,3,4,5でなく、1,1,1,1,1でなく、IDとして...

+0

答えをくれてありがとう、Steven。私の場合、私はPostgreSQLを使用しています。私はすでにSQLで書かれたクエリーを持っていますが、ARelが助けてくれるならば、私は大好きではなく、見たいと思っていました。これをRails 3で行います。 –

関連する問題