SQL

[SQL 쿼리테스트] 5일차

지구(Jigoo) 2025. 7. 15. 12:15

프로그래머스 MySQL 레벨 2 문제풀이

 

1) 물고기 종류 별 잡은 수 구하기 (풀이 완료)

  • 틀린 이유1: COUNT(*) 대신 SUM(*)을 사용함 SUM(*)은 없는 집계함수임 (SUM(변수명)은 가능)
  • 틀린 이유2: LEFT JOIN 왼, 오 테이블 순서를 바꿔서 씀. SQL JOIN 개념 다시 공부해야 할듯
SELECT COUNT(*) AS FISH_COUNT, FISH_NAME
FROM FISH_INFO t1 LEFT JOIN FISH_NAME_INFO t2 USING (FISH_TYPE)
GROUP BY FISH_NAME
ORDER BY FISH_COUNT DESC;

 

2) 노선별 평균 역 사이 거리 조회하기 (풀이 실패)

  • 반올림: ROUND(원래 값, 반올림 후 N번째 자리까지 표시)
  • 틀린 이유: SELECT에서 TOTAL_DISTANCE 선언시 CONCAT으로 "km" 문자와 연결되며 TOTAL_DISTANCE 칼럼은 문자로 취급됨. 따라서 ORDER BY TOTAL_DISTANCE로 정렬시 정렬 순서가 문자열에 준하게 되어 숫자 정렬 순서와 달라짐
    • ORDER BY ROUND(SUM(D_BETWEEN_DIST), 1) 을 사용해야 함 [참고]
SELECT ROUTE,
       CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), "km") AS TOTAL_DISTANCE, 
       CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), "km") AS AVERAGE_DISTANCE
FROM SUBWAY_DISTANCE
GROUP BY ROUTE
ORDER BY ROUND(SUM(D_BETWEEN_DIST), 1) DESC;

 

3) 연도 별 평균 미세먼지 농도 조회하기 (풀이 완료)

  • DATE_FORMAT(YM, "%Y") 와 YEAR(YM)은 반환값의 타입이 달라 정렬(ORDER BY)이 다르게 됨
  • 따라서 일반적인 숫자 정렬을 원할 때는 YEAR 사용
SELECT YEAR(YM) AS YEAR, 
       ROUND(AVG(PM_VAL1), 2) AS "PM10", 
       ROUND(AVG(PM_VAL2), 2) AS "PM2.5"
FROM AIR_POLLUTION
WHERE LOCATION1 = "경기도" AND LOCATION2 = "수원"
GROUP BY YEAR
ORDER BY YEAR ASC;

 

4) 조건에 맞는 사원 정보 조회하기 (풀이 완료)

SELECT SCORE, EMP_NO, EMP_NAME, POSITION, EMAIL
FROM HR_EMPLOYEES t2 LEFT JOIN (
SELECT EMP_NO, SUM(SCORE) AS SCORE
FROM HR_GRADE
GROUP BY EMP_NO) t3 USING (EMP_NO)
ORDER BY SCORE DESC
LIMIT 1;

 

5) 조건에 맞는 개발자 찾기 (풀이 실패)

  • 틀린 이유: 비트 연산(&)을 위해 스킬 코드 값을 BIN 함수로 이진수로 변환 → CONVERT 함수로 정수형으로 변환하려고 했음
    • 비트 연산은 연산 대상 숫자 값을 이진수로 변환해주지 않아도 알아서 작동함
  • WHERE 대신 JOIN을 활용하는 방법으로도 재풀이 필요
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPERS
WHERE (SKILL_CODE&(SELECT CODE FROM SKILLCODES WHERE NAME = "C#") != 0)
OR (SKILL_CODE&(SELECT CODE FROM SKILLCODES WHERE NAME = "Python") != 0)
ORDER BY ID ASC;

'SQL' 카테고리의 다른 글

[SQL 쿼리테스트] 프로그래머스 Level1 복습  (0) 2025.11.22
[SQL 쿼리테스트] 6일차  (0) 2025.08.22
[SQL 쿼리테스트] 4일차  (0) 2025.06.09
[SQL 쿼리테스트] 3일차  (0) 2025.06.08
[SQL 쿼리테스트] 2일차  (4) 2025.06.06