문제 링크 :
https://www.hackerrank.com/challenges/weather-observation-station-5/problem
1. 요구 사항 이해
가장 짧은 도시 이름과 가장 긴 도시 이름을 가진 도시와 이름 길이를 출력.
2. 설계/검증
✔️ 같은 순위가 있으면 알파벳 순서가 가장 처음인 것 하나만 출력
- ROW_NUMBER() 윈도우 함수 사용
✔️ 문자열 길이를 구하는 LENGTH
3. 정상 코드
방법 1. ROW_NUMBER(번호 매기는 함수) 윈도우 함수 사용.
SELECT CITY, LENGTH(CITY)
FROM(SELECT CITY, LENGTH(CITY),
ROW_NUMBER() OVER(PARTITION BY LENGTH(CITY) ORDER BY LENGTH(CITY) DESC, CITY) AS NUM
FROM STATION
WHERE LENGTH(CITY) = (SELECT MAX(LENGTH(CITY)) FROM STATION)
OR LENGTH(CITY) = (SELECT MIN(LENGTH(CITY)) FROM STATION)) AS INLINEV
WHERE NUM=1
/* 출력 결과
Amo 3
Marine On Saint Croix 21
*/
방법 2. UNION 사용
(SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) ASC, CITY
LIMIT 1)
UNION
(SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) DESC, CITY
LIMIT 1)
/*실행 결과
Amo 3
Marine On Saint Croix 21
*/
* UNION 할 테이블을 소괄호로 구분지어야 한다.
내부 동작 순서
FROM 절 인라인 뷰 (
1. FROM 절
STATION 테이블을 대상으로 합니다.
2. WHERE 절
CITY의 길이가 최대(MAX(LENGTH(CITY))) 또는 최소(MIN(LENGTH(CITY)))인 행만 선택합니다.
3. SELECT 절
CITY, LENGTH(CITY), 그리고 ROW_NUMBER()를 사용하여 LENGTH(CITY)를 기준으로 내림차순으로 정렬하고, 길이가 같은 경우 CITY를 오름차순으로 정렬한 순서에 따라 각 행에 순서를 매깁니다.
)
4. WHERE 절
NUM이 1인 행만 선택합니다. 이는 서브쿼리 내부에서 매긴 순서 중 첫 번째 행을 의미합니다.
5. SELECT 절
CITY와 해당 CITY의 길이(LENGTH(CITY))를 선택합니다.
4. 추가 정리
특정 윈도우(또는 범위)에 대해 연산을 수행하고 결과를 반환하는 함수
특히 정렬된 데이터에 대한 집계나 분석 작업을 수행할 때 유용
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 해커랭크' 카테고리의 다른 글
[해커랭크Medium] (2024) Binary Tree Nodes, 이진 트리 노드 (설명/코드/정답) (0) | 2024.02.21 |
---|---|
[해커랭크Medium](2024) The PADS. 교수, 연기자, 의사, 가수 (설명/코드/정답) (0) | 2024.02.16 |
[해커랭크Medium] (2024) Weather Observation Station 18,19 (설명/코드/정답) (0) | 2024.02.15 |