Hier ist ein bisschen Probe Kontext für meine Frage unten zu klären zu helfen, was ich frage ...Ist es möglich, dynamische Aggregat-Spalten in einer Arel Abfrage zu konstruieren, die eine Verknüpfung verwendet?
Das Schema
Users
- id
- name
Answers
- id
- user_id
- topic_id
- was_correct
Topics
- id
- name
Die Daten
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
Was ich möchte, in einer Ergebnismenge haben, ist eine Tabelle mit einer Zeile pro Benutzer und zwei Spalten pro Thema, eine, die die Summe der richtigen Antworten für das Thema zeigt, ein Und eine, die die Summe der falschen Antworten für dieses Thema zeigt. Für die Probe obigen Daten würde diese Ergebnismenge wie folgt aussehen:
Mein gewünschte Ergebnis
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
Offensichtlich, wenn es mehr Themen in der Themen-Tabelle wäre, würde ich diese Abfrage wie neu sind correct_sum und incorrect_sums für jedes Thema, das, so ich sind auf der Suche nach einem Weg zu schreiben, dies ohne Hartcodierung topic_ids in die Summenfunktionen meiner select-Klausel vorhanden ist.
Gibt es eine intelligente Art und Weise diese Art der Sache mit Arel zu Magie?
Danke für die Antwort, Steven. In meinem Fall bin ich mit Postgresql, und ich habe die Abfrage Ich brauche schon in SQL, es ist nur eklig SQL, die ich nicht liebe geschrieben habe und hatte gehofft, um zu sehen, vor allem für meine Erbauung, wenn Arel mir helfen Mach das in Rails 3. –