아래와 같이 aptitude_answer와 aptitude_test 두개의 테이블 두개가 있는데요
aptitude_answer는 학생이 풀은 답을 타입 파트 번호별로 저장한 테이블 입니다.
aptitude_test는 문제와 답을 관리하는 테이블 입니다.
[aptitude_answer]
userid | type | part | numb | answer |
333 | abil | B | 1 | 3 |
333 | abil | B | 2 | 3 |
333 | abil | B | 3 | 4 |
333 | abil | B | 4 | 5 |
333 | abil | B | 5 | 5 |
333 | abil | B | 6 | 4 |
333 | abil | B | 7 | 3 |
333 | abil | B | 8 | 2 |
333 | abil | B | 9 | 1 |
333 | abil | B | 10 | 2 |
333 | abil | C | 1 | 1 |
333 | abil | C | 2 | 2 |
333 | abil | C | 3 | 3 |
333 | abil | C | 4 | 4 |
333 | abil | C | 5 | 5 |
333 | abil | C | 6 | 4 |
333 | abil | C | 7 | 3 |
333 | abil | C | 8 | 2 |
333 | abil | C | 9 | 1 |
333 | abil | C | 10 | 2 |
333 | abil | D | 1 | 1 |
333 | abil | D | 2 | 2 |
333 | abil | D | 3 | 3 |
333 | abil | D | 4 | 4 |
333 | abil | D | 5 | 5 |
333 | abil | D | 6 | 4 |
333 | abil | D | 7 | 3 |
333 | abil | D | 8 | 2 |
333 | abil | D | 9 | 1 |
333 | abil | D | 10 | 2 |
333 | abil | E | 1 | 2 |
333 | abil | E | 2 | 1 |
333 | abil | E | 3 | 4 |
333 | abil | E | 4 | 3 |
333 | abil | E | 5 | 1 |
333 | abil | E | 6 | 2 |
333 | abil | E | 7 | 3 |
333 | abil | E | 8 | 2 |
333 | abil | E | 9 | 2 |
333 | abil | E | 10 | 4 |
333 | abil | F | 1 | 1 |
333 | abil | F | 2 | 2 |
333 | abil | F | 3 | 3 |
333 | abil | F | 4 | 4 |
333 | abil | F | 5 | 5 |
333 | abil | F | 6 | 4 |
333 | abil | F | 7 | 3 |
333 | abil | F | 8 | 2 |
333 | abil | F | 9 | 1 |
333 | abil | F | 10 | 4 |
333 | abil | A | 1 | 1 |
333 | abil | A | 2 | 2 |
333 | abil | A | 3 | 3 |
333 | abil | A | 4 | 4 |
333 | abil | A | 5 | 5 |
333 | abil | A | 6 | 4 |
333 | abil | A | 7 | 3 |
333 | abil | A | 8 | 2 |
333 | abil | A | 9 | 1 |
333 | abil | A | 10 | 2 |
[aptitude_test]
type | part | numb | answer |
abil | A | 1 |
1 |
abil | A | 2 |
2 |
abil | A | 3 |
1 |
abil | A | 4 |
2 |
abil | A | 5 |
1 |
abil | A | 6 |
2 |
abil | A | 7 |
1 |
abil | A | 8 |
2 |
abil | A | 9 |
1 |
abil | A | 10 |
2 |
abil | B | 1 |
1 |
abil | B | 2 |
2 |
abil | B | 3 |
1 |
abil | B | 4 |
2 |
abil | B | 5 |
1 |
abil | B | 6 |
2 |
abil | B | 7 |
1 |
abil | B | 8 |
2 |
abil | B | 9 |
1 |
abil | B | 10 |
2 |
abil | C | 1 |
1 |
abil | C | 2 |
2 |
abil | C | 3 |
1 |
abil | C | 4 |
2 |
abil | C | 5 |
1 |
abil | C | 6 |
2 |
abil | C | 7 |
1 |
abil | C | 8 |
2 |
abil | C | 9 |
1 |
abil | C | 10 |
2 |
abil | D | 1 |
1 |
abil | D | 2 |
2 |
abil | D | 3 |
1 |
abil | D | 4 |
2 |
abil | D | 5 |
1 |
abil | D | 6 |
2 |
abil | D | 7 |
1 |
abil | D | 8 |
2 |
abil | D | 9 |
1 |
abil | D | 10 |
2 |
abil | E | 1 |
1 |
abil | E | 2 |
2 |
abil | E | 3 |
1 |
abil | E | 4 |
2 |
abil | E | 5 |
1 |
abil | E | 6 |
2 |
abil | E | 7 |
1 |
abil | E | 8 |
2 |
abil | E | 9 |
1 |
abil | E | 10 |
2 |
abil | F | 1 |
1 |
abil | F | 2 |
2 |
abil | F | 3 |
1 |
abil | F | 4 |
2 |
abil | F | 5 |
1 |
abil | F | 6 |
2 |
abil | F | 7 |
1 |
abil | F | 8 |
2 |
abil | F | 9 |
1 |
abil | F | 10 |
2 |
아래와 같이 쿼리를 작성했는데요 답이 일치하는 것만 가져오다 보니 A파트의 경우처럼 매칭되는것이 없을 때는 결과에
나오지 않습니다. 답이 일치하지 않을경우에도 나오게 하고 싶습니다.
select 'PART '+ a.part, (COUNT(*)*10) ccnt
from aptitude_answer a, aptitude_test b
where a.type = b.type
and a.part = b.part
and a.numb = b.numb
and a.answer = b.answer
and a.userid='333'
and a.type='abil'
and b.type='abil'
group by a.part order by 1,2
part | 점수 |
PART B | 30 |
PART C | 30 |
PART D | 50 |
PART E | 70 |
PART F | 30 |
제가 원하는 것은 아래처럼 맞은게 없다면 0으로 나오게 하고 싶습니다.
part | 점수 |
PART A | 0 |
PART B | 30 |
PART C | 30 |
PART D | 50 |
PART E | 70 |
PART F | 30 |
Comment 7
-
wildflow
2013.06.28 15:52
-
개발자2
2013.06.28 16:05
left join 조건에서 on 에 a.answer = b.answer을 하면 되는건가요?
그리고 isnull을 어디에 추가해줘야 하는지...
이해가 잘 안가네요 .ㅠ.
-
wildflow
2013.06.28 16:21
엌 제가 쿼리를 잘못본듯..aptitude_test 에는 answer 칼럼이 없는건가요?
-
개발자2
2013.06.28 16:31
aptitude_test 테이블에도 answer 필드가 있습니다.
제가 테스트 데이터 만들때 안넣어서 없는걸로 아셨나봐요^^
-
건우아빠
2013.06.28 18:30
left 조인을 하시더라도 기준값을 가지고 아웃조인이 걸리는거라 값이 없을때는 나오지 않습니다.
기준이되는 값을 먼저 강제로 만드시고 이걸 기준으로 left조인을 하셔야 합니다.
part 부분이 기준이 되겠죠...
-
개발자2
2013.06.28 19:28
요렇게 했는데 잘 안나오네요 ㅠ.ㅠ
select 'PART '+a.part, (COUNT(*)*10) ccnt
from aptitude_answer a left outer join aptitude_test b on a.part = b.part
where a.type = b.type
and a.numb = b.numb
and a.answer = b.answer
and a.userid='333'
and a.type='abil'
and b.type='abil'
group by a.part
order by 1,2 -
건우아빠
2013.06.29 13:00
일단 어떠한 조인을 하시더라도 존재하지 않는 값은 나오지가 안습니다.
어느 한쪽이라도 있어야 나오게 됩니다.
WITH MST
AS (
select 'A' part union all
select 'B' part union all
select 'C' part union all
select 'D' part union all
select 'E' part union all
select 'F' part)
SELECT *
FROM MST
이런 기준 테이블으 란드시고 이걸로 조인을 하셔야 원하는 형태의 값을 나타 낼수 있습니다.
LEFT JOIN을 하시고 ISNULL을 0으로 처리하시면 될꺼 같은데
제가 말씀하신 내용을 정확히 이해했는지 모르겠네요;;