The Report : 다른 CASE문 했더니 NULL이 거꾸로 적용돼요
351
작성한 질문수 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 뒤의 값으로 계산이 될 것이고요.
그러면 결과가 왜 반대로 나오는지 이해가 되실 것 같습니다 :)
0
우와 강의 찍은지 좀 되신 것이라 바로 답변 달릴 줄 몰랐는데
제가 여쭙고 싶었던 것보다 더 많이 얻어갑니다!
문자가 0으로 캐스팅 되는 것, TRUE이면 1 FALSE이면 0인 것, CASE WHEN 구문 2개 차이부터 해서 친절하게 설명해주셔서 정말감사합니다
순위 함수 연습 문제 - 스테디셀러 작가 찾기
0
100
1
문제 내용이 잘못된 것 같습니다.
0
74
2
서브쿼리 질문
0
75
2
[수업질문] 서브쿼리 > null데이터 avg사용 주의
0
85
1
서브쿼리는 언제 작성하는건가요?
0
86
1
안녕하세요 질문드립니다.
0
73
2
Top Earners 문제관련 질문
0
100
2
고급반 cheetsheet
0
165
2
196. Delete Duplicate Emails 좋은 코드 질문
0
146
1
a.id = 1과 b.id=1이 없어도 되는 이유
0
133
0
강의 플랫폼
0
204
3
리트코드 177번 function 풀이중 case when 활용을 위한 서브쿼리 구문을 제출 시 검증에 통과되지 않도록 보강된 듯 하네요
0
213
2
ERD 읽는법에 추가 질문 있어요
0
258
1
lead, lag로 풀이할 시 id 값이 존재하지 않는 경우의 오답
0
368
2
사용자정의함수
0
233
1
이 문제 inner join이 이해가 안됩니다.
0
302
1
평균 함수 사용할 때 주의점과 해결법
0
266
1
196. subquery로 풀 때, 궁금한 점
0
392
2
쿼리성능 질문드립니다.
0
320
1
리트코드 highest department salary 문제
0
265
2
The report 문제 order by부분 질문
0
275
2
리트코드 서브쿼리 문제 질문
0
424
1
DEPARTMENT HIGHEST SALARY 서브쿼리 문제 문의
0
243
1
서브쿼리의 활용사례 및 조인관련질문
0
292
1





