2개의 쿼리문에서 총 count가 왜 다를까요? 0 9 1,938

by 물개 [SQL Query] [2014.09.28 16:45:48]


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안을 간결하고 나은 성능으로 작성하려면 어느 방식으로 구성하는 것이 좋은지 조언 부탁드립니다.

 

읽어주셔서 감사합니다.

by 비주류 [2014.09.28 22:38:56]

country = 'ko' 로 나온 결과와 useEn = 'Y' 나온 결과 합치면 전체와 같나요?
2안 조건에 country = 'ko' OR useEn = 'Y' 넣어보세요.


by 우리집아찌 [2014.09.29 08:57:47]

2번째는 count 가 아니라 SUM 하셔야하겠는데요..


by 아발란체 [2014.09.29 09:30:31]

= ㅅ =);; 저 정도면 쿼리가 완전 다른 것 같은데..

디코드 문도 결과 차이가 발생하고, 그룹바이 절도 결과 차이가 발생 할 것 같습니다.


by 손님 [2014.09.29 09:43:21]
2안 조건에 country = 'ko' OR useEn = 'Y' 넣고해도 동일하지가 않네요
위 쿼리문에 빠진 조건입니다
모두 답변 달아주셔서 감사합니다

by 물개 [2014.09.29 09:55:59]
2안 type에 sum 걸고 group by id 를 추가하니 결과가 동일하네요 왜 그런 결과가 ㅠ 실행시간도 빠르고 좋네요
감사합니다

by 우리집아찌 [2014.09.29 11:11:05]

2번째 쿼리에서 COUNT 하시면 DECODE한 의미가 없습니다. 그냥 전체 row 를 count 해옵니다.


by 마농 [2014.09.29 11:38:59]

결과만 맞게 나왔다고 그냥 넘어가시면 안됩니다.
왜 그런지를 이해하고 넘어가야죠.


두 쿼리의 차이점은 두가지 입니다.
하나는 조건이 있냐 없냐의 차이이고
하나는 그룹바이를 했느냐 안했느냐 차이가 있습니다.
ID 가 유니크 하다면 조건절만 추가하면 그룹바이와 상관 없이 건수는 맞아야 합니다.
그런데 건수가 틀리다는 얘기는 중복 ID 가 있다는 말이죠.


count 대신 sum 을 한것은 무슨 의도일까요?
잘못된 시도를 한 것 같습니다.
sum 을 했는데 count 와 같은 결과가 나왔다면?
우연의 일치로 1 값만 존재하고 2 값은 없다는 거겠네요.


by 우리집아찌 [2014.09.29 13:22:29]

아 .. 쿼리 대충보고 답글달았더니.. 그렇네요..


by 물개 [2014.09.30 22:32:33]

답변 감사합니다.

저도 생각해보니 id 값이 유니크가 아니었나 라는 생각을 해봤는데

 

이런 경우에 id가 2건씩 있는 값을 조회하는 쿼리문을 어찌 돌려봐야 할지 고민해봐야겠습니다.

 

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입