문제:
Query the two cities in STATION with the shortest and longest CITY names, as well as their respective lengths (i.e.: number of characters in the name). If there is more than one smallest or largest city, choose the one that comes first when ordered alphabetically.
The STATION table is described as follows:
해석하자면, 스테이션 테이블에서 문자열의 길이가 가장 긴 도시명과 문자열의 길이 그리고 가장 문자열의 길이가 짧은 도시명과 문자열의 길이를 구하는 문제
정답
select city, len
from(select city,
length(city) as len,
row_number() over(order by length(city) desc, city asc) as r_max, # 긴문자열기준
row_number() over(order by length(city) asc, city asc) as r_min # 짧은문자열기준
from station) a
where a.r_max ='1' or a.r_min = '1' ;
풀이
row_number을 활용하여 풀었다. 어려운 문제는 아닌데 mysql로 order by ~ limit 이렇게 맨처음 혹은 맨 마지막의 데이터를 가지고오는 건 익숙했는데 맨앞과 맨끝을 어떻게 가져오지 처음 해보는 접근방식이라 살짝 당황했다. union을 쓰자니 내 자존심이 허락하지 않아, 실무에서는 한 번도 안써본 row_number 함수를 활용해보았다. 오랜만에 쓰려니 문법도 까먹어버렸다. 이렇게 복습하는거지~ row_number(order by ~)로 각각 긴문자열, 짧은 문자열 기준으로 r_max, r_min컬럼을 만들어 각각 1위를 가지고 오는 식으로 풀이했다.
'SQL' 카테고리의 다른 글
HackerRank The Blunder 문제 풀이 (0) | 2024.08.14 |
---|---|
데이터를 활용한 KPI 수립 (0) | 2024.08.08 |
SQL 코딩테스트 연습 사이트 모음(프로그래머스, 해커랭크, 솔프에스큐엘 외) (1) | 2023.10.22 |
[프로그래머스 SQL 코테] 오랜 기간 보호한 동물(1) OUTER JOIN (0) | 2023.09.02 |
[SQL 코딩테스트]프로그래머스 입양 시각 구하기(1)_GROUP BY, HH24, TO_NUMBER (0) | 2023.08.25 |