2010-12-29 3 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 

무엇 나는 결과 세트에서 사용자 당 하나의 열과 주제 당 두 개의 열, 주제에 대한 정답의 합계를 보여주는 표, 그 주제에 대한 부정확 한 답의 합계를 나타내는 것. 위의 샘플 데이터의 경우,이 결과 집합과 같습니다

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 및 incorrect_sums 존재하는 각 항목에 대해, 그래서 하드 코드 topic_ids 내 선택 절의 합계 기능을 사용하지 않고이 쓸 수있는 방법을 찾고 있어요.

ARel을 사용하면 이런 종류의 마법을 현혹시킬 수 있습니까?

답변

0

게이브,

은 당신이 여기에서 찾고있는 것은 크로스 탭 쿼리입니다. 불행히도 이것을 쓰는 데는 많은 방법이 있지만, SQL에서는 충분히 일반적이지 않습니다. AFAIK 각 데이터베이스는 크로스 탭을 다르게 처리합니다. 이것을 보는 또 다른 방법은 일반적으로 OLTP 유형 데이터베이스 (OLTP와 반대)에서 볼 수있는 "큐브"입니다.

SQL에 쉽게 쓸 수 있지만 사용중인 데이터베이스의 일부 원시 함수가 포함될 가능성이 높습니다. 어떤 DB를 사용하고 있습니까?

답변 테이블에 ID로 1,2,3,4,5가 아니라 1,1,1,1,1이 있어야합니다 ...

+0

답변을 주셔서 감사합니다. Steven. 필자의 경우, PostgreSQL을 사용하고 있으며, SQL로 작성해야하는 쿼리가 있는데, ARel이 도움이된다면, 내가 좋아하지 않고 보길 원했던 icky sql 일뿐입니다. Rails 3에서이 작업을 수행하십시오. –

관련 문제