신이 되고 싶은 갓지이

SQL 코테 연습 프로그래머스 Lv.4 문제풀이 3 본문

SQL

SQL 코테 연습 프로그래머스 Lv.4 문제풀이 3

갓지이 2025. 2. 14. 12:08

1. 서울에 위치한 식당 목록 출력하기 (SELECT)  정답률 : 77%

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.

 

우선 두 테이블을 join하고 조건에 맞게 주소가 '서울'인 행만 where절로 남겨두었다. 항상 시작 전에' SELECT * FROM~' 으로 모든 테이블의 전체적인 값들을 확인하는데 확인해보니 '서울시'와 '서울특별시'가 혼용되고 있어 ADDRESS항목에서 앞글자 2자가 '서울'인 항목을 가져와야했다. 방법으로는 ①like함수를 사용하여 첫 두 글자가 '서울'로 시작하는 주소지를 찾는 방법과, ②substr을 통해 문자열의 첫 두글자를 비교하는 방법이 있다. 

첫 시도는 틀렸는데 결과 테이블을 보니 LEFT JOIN시 리뷰점수가 없는 식당이 있어 INNER JOIN으로 리뷰가 있는 식당만 join했더니 정답이었다. 점수가 있는 식당만 원하는지 여부에 대한 조건이 없어서 살짝 당황했다.

-- 1. INNER JOIN
SELECT I.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS
       , ROUND(AVG(REVIEW_SCORE),2) AS SCORE
FROM REST_INFO I
INNER JOIN REST_REVIEW R
    ON I.REST_ID=R.REST_ID
WHERE ADDRESS like '서울%' -- like 
-- WHERE SUBSTR(ADDRESS,1,2)='서울' -- substr
GROUP BY I.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS
ORDER BY SCORE DESC, FAVORITES DESC

 

 

 

2. FrontEnd 개발자 찾기 (JOIN)  정답률 : 49%

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

DEVELOPERS 테이블에서 Front End 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요.

결과는 ID를 기준으로 오름차순 정렬해 주세요.

 

정답률에 비해 비트 연산만 잘 안다면 조금 쉬운 문제였다. 갖고 있는 SKILLCODES가 여러 CODE를 포함하고 있기에 join 조건에는 크기를 통해 버퍼를 두고 join을 한뒤에 where 절로 조건을 주었는데, 그냥 on에 'CODE & SKILL_CODE=CODE'를 주고 실행해도 결과는 동일하게 나온다. 

-- 1. 통과
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
LEFT JOIN SKILLCODES
    ON CODE<=SKILL_CODE
WHERE CODE & SKILL_CODE=CODE AND CATEGORY='Front End'
GROUP BY 1,2,3,4
ORDER BY 1