1

下面是我的问题的一些示例上下文,以帮助澄清我在问什么......

架构

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

显然,如果 Topics 表中有更多主题,我希望这个查询为每个存在的主题包含新的正确总和和不正确总和,所以我正在寻找一种方法来编写它而不将主题 ID 硬编码到总和函数中我的选择子句。

有没有一种聪明的方法可以用 ARel 来魔术这种事情?

4

1 回答 1

0

加布,

您在这里寻找的是交叉表查询。编写此代码的方法有很多,不幸的是,没有一种方法在 SQL 中足够通用。AFAIK 每个数据库处理交叉表的方式不同。另一种看待它的方式是作为“立方体”,它通常在 OLAP 类型的数据库中找到(与 OLTP 相对)。

它很容易用 SQL 编写,但是可能会包含一些您正在使用的数据库的本机函数。你用的是什么数据库?

您的答案表看起来需要 1,2,3,4,5 而不是 1,1,1,1,1 作为 id...

于 2010-12-30T11:37:57.883 回答