-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
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
윤선미
지식공유자2021.05.08
안녕하세요! 재미있는 질문을 주셨네요.
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
질문자2021.05.10
우와 강의 찍은지 좀 되신 것이라 바로 답변 달릴 줄 몰랐는데
제가 여쭙고 싶었던 것보다 더 많이 얻어갑니다!
문자가 0으로 캐스팅 되는 것, TRUE이면 1 FALSE이면 0인 것, CASE WHEN 구문 2개 차이부터 해서 친절하게 설명해주셔서 정말감사합니다
답변 1