1안.
select count(*) --2000건
from (
select id, min(type) type
from(
select id, '2' as type
from school
where country = 'ko'
union all
select id, '1' as type
from school
where useEn = 'Y'
)
group by id
)
2안.
select count(*) -- 2200건
from (
select id, userEn, country, decode(useEn, 'Y', '1', decode(country, 'ko', '2', '0')) as type
from school
where userEn = 'Y' --조건문 질문시에 누락했네요;;
or country = 'ko'
)
속도차이는 잘 모르겠지만
1안으로 구성되어 있는 것(union all)을 한 번(union all 없이)으로 구성해보고 싶어서
고민끝에 decode 문을 써서 구성을 했는데요.
출력 결과가 다르게 나타나서 해결이 안되었습니다.
[질문1] 위의 쿼리 2안은 무엇이 문제이고
[질문2] 1안을 간결하고 나은 성능으로 작성하려면 어느 방식으로 구성하는 것이 좋은지 조언 부탁드립니다.
읽어주셔서 감사합니다.
결과만 맞게 나왔다고 그냥 넘어가시면 안됩니다.
왜 그런지를 이해하고 넘어가야죠.
두 쿼리의 차이점은 두가지 입니다.
하나는 조건이 있냐 없냐의 차이이고
하나는 그룹바이를 했느냐 안했느냐 차이가 있습니다.
ID 가 유니크 하다면 조건절만 추가하면 그룹바이와 상관 없이 건수는 맞아야 합니다.
그런데 건수가 틀리다는 얘기는 중복 ID 가 있다는 말이죠.
count 대신 sum 을 한것은 무슨 의도일까요?
잘못된 시도를 한 것 같습니다.
sum 을 했는데 count 와 같은 결과가 나왔다면?
우연의 일치로 1 값만 존재하고 2 값은 없다는 거겠네요.