728x90
반응형
Weather Observation Station 5 | HackerRank
Write a query to print the shortest and longest length city name along with the length of the city names.
www.hackerrank.com
문제

문제 접근 방식
city 문자열 길이가 가장 짧고, 가장 긴 city와 길이를 조회하는 문제이다.
여기서, 1개의 쿼리가 아닌 2개의 쿼리도 가능하다고 함. 그렇다면 매우 쉬워짐!
/* CITY 문자열 길이가 가장 짧은 CITY */
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY), CITY LIMIT 1;
/* CITY 문자열 길이가 가장 긴 CITY */
SELECT CITY, LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) DESC, CITY LIMIT 1;
- LENGTH(컬럼명) 활용하여 문자열 길이 구하기
- ORDER BY를 활용하여 문자열 길이와 알파벳 순서를 정렬
- LIMIT를 활용하여 가장 짧고, 긴 CITY만 추출
그렇다면 1개의 쿼리로는 추출할 수 없을까?
1개의 쿼리로 원하는 값을 조회해보았다.
WITH CITY AS (
-- 1) CITY별 길이 계산
SELECT CITY
, LENGTH(CITY) AS LNG
FROM STATION
), MINMAX AS (
-- 2) 전체 길이 중 가장 짧고, 긴 문자열 길이 추출
SELECT CITY, LNG
, MIN(LNG) OVER() AS MIN
, MAX(LNG) OVER() AS MAX
FROM CITY
GROUP BY CITY, LNG
), RN AS (
-- 3) 알파벳 정렬하여 1개만 조회해야 하므로 ROW_NUMBER로 순서 설정
SELECT CITY, LNG
, ROW_NUMBER() OVER(PARTITION BY LNG ORDER BY CITY) AS RN
FROM MINMAX
WHERE LNG IN (MIN, MAX)
)
-- 4) 순서가 1인 ROW만 추출
SELECT CITY, LNG FROM RN WHERE RN = 1;
- LENGTH(컬럼명)을 활용하여 문자열 길이 구하기
- MIN() OVER() / MAX() OVER() 를 활용하여 전체 길이의 최소 최대값 구하기
- 길이가 최소, 최대값인 ROW 중 동일한 길이가 있을 수 있으므로 ROW_NUMBER()를 활용하여 알파벳 정렬 후 순서 매기기
- 순서가 1인 ROW만 추출
728x90
반응형
'코딩 테스트 > MySQL' 카테고리의 다른 글
| [HackerRank] New Companies (0) | 2025.07.22 |
|---|---|
| [HackerRank] Binary Tree Nodes (0) | 2025.07.21 |
| [MySQL 코딩테스트 연습] 2. JOIN (4) 보호소에서 중성화한 동물 (0) | 2022.08.10 |
| [MySQL 코딩테스트 연습] 2. JOIN (3) 오랜 기간 보호한 동물(1) (0) | 2022.08.10 |
| [MySQL 코딩테스트 연습] 2. JOIN (2) 있었는데요 없었습니다 (0) | 2022.07.19 |