2025.2.22 TIL

황효정·2025년 2월 22일

데이터 분석

목록 보기
4/88
post-thumbnail

과제 푸는 과정

  • case when 구문을 사용하여 레벨구간을 아래와 같이 구분해주시고, 컬럼이름을 ‘levelgroup’ 으로 설정해주세요.

[레벨구간]
◦ 1~10Lv 이하
◦ 11~20Lv 이하
◦ 21~30Lv 이하
◦ 31~40Lv 이하
◦ 41~50Lv 이하
◦ 51~60Lv 이하
◦ 61~70Lv 이하
◦ 71~80Lv 이하
◦ 81~90Lv 이하
◦ 91~100Lv

결과값) game_actor_id, level, levelgroup, first_login_date 컬럼을 추출해주시고, first_login_date를 기준으로 내림차순 정렬해주세요.

아래는 처음 푼 방식: 하지만 에러가 남
select game_actor_id, level, levelgroup, first_login_date
case when level between(1~10) then '1~10Lv 이하'
when 11<=level <=20 then '11~20Lv 이하'
when 21<=level <=30 then '21~30Lv 이하'
when 31<=level <=40 then '31~40Lv 이하'
when 41<=level <=50 then '41~50Lv 이하'
when 51<=level <=60 then '51~60Lv 이하'
when 61<=level <=70 then '61~70Lv 이하'
when 71<=level <=80 then '71~80Lv 이하'
when 81<=level <=90 then '81~90Lv 이하'
else '91~100Lv'
end as levelgroup
from users
order by first_login_date desc

case when절에서 1<=level<=10 방식이 잘못된 건가 싶어서 between으로 바꿔봄. 하지만 또 에러남.
SQL Error [1064][42000]: You have an error in your SQLsyntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'case when level between(1~10) then '1~10Lv 이하'
when 11<=level <=20 the' at line 2

Error position: line: 1
라고 해서 첫번째 줄부터가 잘못되었다... 다시 case when 구문 정의로 돌아가보자.

혹시나 하는 마음에 between을 적어봄. 하지만 역시나 실행이 되지 않음.
뭐가 문제인지 하는 마음에 이것저것 조작하면서 구글링도 해보지만 해결되지 않음.
->조원분께 연락하여 도움을 구함. 이것저것 수정하다가 결국 발견
-> select구문 끝날 때 컴마를 쓰지 않았던것이었다..
select game_actor_id, level, levelgroup, first_login_date이면 줄 바꿔서 case when을 사용할 때 first_login_date, 이렇게 컴마를 적은다음에 case when을 적어야 하는데 그동안 그 컴마 하나때문에 계속 에러가 났던 것임. 하하 여러분, select문 끝날 때 꼭 컴마를 쓰십쇼

근데 select *을 쓸 때는 컴마를 굳이 쓰지 않는다. 언제 컴마를 쓰느냐,, ->select구문에 여러 컬럼을 가져올 때 컴마를 쓰는 듯하다.

그리고 when 11<=level <=20 이런 식으로 식 쓸 수 없다고 함.
차라리 between을 쓰던가, 아니면
when (11<=level and level<=20)이런식으로 쓰던가 해야함.

profile
청지기

0개의 댓글