• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

The Report : 다른 CASE문 했더니 NULL이 거꾸로 적용돼요

21.05.05 18:40 작성 조회수 200

1

시도1.  SELECT CASE s.Name WHEN g.Grade < 8 THEN "NULL" ELSE s.Name END
            8,9,10 GRADE인 경우가 NULL,  8 미만은 이름이 나옴  => FAIL
시도2.   SELECT CASE s.Name WHEN g.Grade < 8 THEN "NULL" ELSE s.Name END
            강의와 똑같이,  8,9,10 GRADE인 경우 이름, 8 미만은 NULL 나옴 => SUCCESS
강의 : SELECT CASE WHEN g.Grade < 8 THEN NULL ELSE s.Name END as name,  

질문 : 왜 동일한 CASE문인데 저의 시도에서는 grade >= 8 해야 강의의 grade <8 과 같은 결과가 나오나요?

답변 1

답변을 작성해보세요.

1

안녕하세요! 재미있는 질문을 주셨네요.

  

1. CASE WHEN 사이에 컬럼명을 넣는 경우에는 CASE WHEN 붙여서 쓰는 경우와 연산 규칙이 조금 다른데요. 구체적으로 어떻게 다른지는 아래 링크를 참고하시면 좋을 같습니다 :)

간단하게 예를 들어보면 "CASE value WHEN 3 THEN 'yes' ELSE 'no' END" 라는 코드가 있다고 생각했을 , value = 3 연산을 해서 참일경우 THEN 으로, 거짓일 경우 ELSE 결과물을 계산합니다.

  

2. 그러면 보내주신 코드에서도 s.name = (g.Grade < 8) 연산을 하겠죠. g.Grade < 8 출력을 해보시면 아시겠지만, grade 값이 8보다 작으면 1, 그렇지 않으면 0으로 계산이 됩니다.

  

3. 그리고 MySQL 숫자와 문자를 비교연산할 , 문자를 자동으로 0으로 캐스팅하여 비교합니다. 구체적인 예시는 아래 링크를 참고해주세요.

  

4. 그러면 g.grade < 8 0 , grade 값이 8 이상일 s.name = (g.Grade < 8) 연산의 결과가 참이 되고 따라서 CASE 문에서 THEN 뒤의 값으로 계산이 되겠죠. 반대의 경우에는 ELSE 뒤의 값으로 계산이 것이고요.

  

그러면 결과가 반대로 나오는지 이해가 되실 같습니다 :)

Rhea Park님의 프로필

Rhea Park

질문자

2021.05.10

우와 강의 찍은지 좀 되신 것이라 바로 답변 달릴 줄 몰랐는데 
제가 여쭙고 싶었던 것보다 더 많이 얻어갑니다!

문자가 0으로 캐스팅 되는 것,   TRUE이면 1 FALSE이면 0인 것, CASE WHEN 구문 2개 차이부터 해서 친절하게 설명해주셔서 정말감사합니다