2진법으로 해놓은것을 보니 비트연산자를 사용해야만 할 것 같았다.
문제 분류가 group by 로 되어있긴 했는데 group by 거의 안쓰고 풀었다...
with fe as(
select category, sum(code) as code
from skillcodes
group by 1
having category = "Front End"
),
c as (
select name , code
from skillcodes
where name = "C#"
),
py as(
select name, code
from skillcodes
where name = "Python"
)
select
case
when d.skill_code&f.code and d.skill_code&p.code then "A"
when d.skill_code&c.code then "B"
when d.skill_code&f.code then "C"
end as grade,
d.id, d.email
from fe f, c c, py p , developers d
where d.skill_code&f.code or d.skill_code&c.code or (d.skill_code&p.code and d.skill_code&f.code)
order by 1, 2
group by를 어디에 어떻게 써야할지 감이 안와서 하드코딩을 하다보니 쿼리가 길어졌다.
프론트, C#, Python 을 나누고 비트연산자로 grade 하나씩 case when 구문으로 구분해 주었다.
where절은 case when 조건문에 걸리지 않는 레코드들을 필터링 하기 위해 사용했다.
하드코딩 해서 금방 풀긴 했지만 쉽지않은 문제였다.
'프로그래머스 > 코딩테스트 연습' 카테고리의 다른 글
SQL lv3 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.05.03 |
---|---|
SQL lv3 물고기 종류 별 대어 찾기 (0) | 2024.04.30 |
SQL lv4 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (3) | 2024.04.29 |
SQL lv3 카테고리 별 도서 판매량 집계하기 (0) | 2024.04.24 |
SQL lv4 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2024.04.24 |