코딩테스트/SQL
[코딩테스트] 프로그래머스 GROUP BY 21 ~ 24
[dev] hiro
2024. 11. 5. 02:42
제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
Programmers SQL 고득점 Kit(GROUP BY)입니다.
노선별 평균 역 사이 거리 조회하기
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 SUM(D_BETWEEN_DIST) DESC;
- 노선 별로 구하기 위해 ROUTE를 그룹화합니다.
GROUP BY ROUTE - 총 누계거리와 평균 역사이를 구하기 위해 SUM과 AVG 함수를 사용하고 문자열을 합성하기 위해 CONCAT 함수를 사용합니다.
CONCAT(ROUND(SUM(D_BETWEEN_DIST), 1), 'km') AS TOTAL_DISTANCE,
CONCAT(ROUND(AVG(D_BETWEEN_DIST), 2), 'km') AS AVERAGE_DISTANCE - 총 누계거리를 기준으로 내림차순 정렬합니다.
물고기 종류 별 잡은 수 구하기
SELECT COUNT(*) AS FISH_COUNT, FISH_NAME
FROM FISH_INFO A
JOIN FISH_NAME_INFO B
ON A.FISH_TYPE = B.FISH_TYPE
GROUP BY FISH_NAME
ORDER BY 1 DESC
- 잡은 물고기와 이름을 매핑하기 위해 JOIN 합니다.
JOIN FISH_NAME_INFO B ON A.FISH_TYPE = B.FISH_TYPE - 물고기 종류를 위해 그룹화합니다.
GROUP BY FISH_NAME - 물고기 잡은 수를 기준으로 내림차순 정렬합니다.
월별 잡은 물고기 수 구하기
SELECT
COUNT(*) AS FISH_COUNT,
EXTRACT(MONTH FROM TIME) AS MONTH
FROM FISH_INFO
GROUP BY EXTRACT(MONTH FROM TIME)
ORDER BY EXTRACT(MONTH FROM TIME) ASC
- 월별로 잡은 물고기를 구하기 위해 그룹화합니다.
GROUP BY EXTRACT(MONTH FROM TIME) - 월을 기준으로 오름차순 정렬합니다.
특정 조건을 만족하는 물고기 별 수와 최대 길이 구하기
SELECT
COUNT(FISH_TYPE) AS FISH_COUNT,
MAX(LENGTH) AS MAX_LENGTH,
FISH_TYPE
FROM (
SELECT
ID,
FISH_TYPE,
IFNULL(LENGTH, 10) AS LENGTH
FROM FISH_INFO
) F
GROUP BY FISH_TYPE
HAVING AVG(LENGTH) >= 33
ORDER BY FISH_TYPE ASC;
- 길이가 10 이하면 null이므로 null을 10으로 지정하기 위해 IFNULL 함수를 사용한 서브 테이블을 F로 지정합니다.
(
SELECT
ID,
FISH_TYPE,
IFNULL(LENGTH, 10) AS LENGTH
FROM FISH_INFO
) F - 평균 길이가 33인 물고기 종류 별로 그룹화합니다.
GROUP BY FISH_TYPE
HAVING AVG(LENGTH) >= 33 - 최대 길이와 물고기 잡은 수를 위해 COUNT 함수와 MAX 함수를 사용합니다.
- 물고기 종류를 기준으로 오름차순 정렬합니다.