Можно ли построить динамические статистические столбцы в запросе ARel, который использует соединение? - PullRequest
1 голос
/ 29 декабря 2010

Вот небольшой пример контекста для моего вопроса ниже, чтобы помочь уточнить, что я спрашиваю ...

Схема

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

В результирующем наборе я хотел бы иметь таблицу с одной строкой на пользователя и двумя столбцами на тему, одна из которых отображает сумму правильных ответов.для темы, и тот, который показывает сумму неправильных ответов по этой теме.Для приведенных выше примеров этот набор результатов будет выглядеть следующим образом:

Мой желаемый результат

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

Очевидно, что если бы в таблице Тем было больше тем, яМне бы хотелось, чтобы этот запрос включал новые правильные_суммы и неверные_суммы для каждой существующей темы, поэтому я ищу способ написать это без жесткого кодирования топики_идентификатора в функциях сумм моего предложения select.

Есть ли умный способ магии такого рода вещей с ARel?

1 Ответ

0 голосов
/ 30 декабря 2010

Гейб,

То, что вы ищете здесь, это кросс-таблица запроса.Есть много подходов к написанию этого, к сожалению, ни один из них не будет достаточно универсальным в SQL.AFAIK каждая база данных обрабатывает кросс-таблицы по-разному.Другой способ взглянуть на это как на «куб», который обычно встречается в базах данных типа OLAP (в отличие от OLTP).

Легко записывается в SQL, однако, вероятно, будет включать некоторые функции, встроенные в базувы используетеКакую базу данных вы используете?

Ваша таблица ответов должна содержать 1,2,3,4,5, а не 1,1,1,1,1 в качестве идентификаторов ...

...