본문 바로가기
PS/SQL

[HackerRank] Weather Observation Station 5

by 행복한라이언 2024. 4. 6.
728x90
반응형

문제링크

https://www.hackerrank.com/challenges/weather-observation-station-5/problem?isFullScreen=true

 

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

 

1. 핵심

  • 도시의 이름이 가장 긴 도시와 짧은 도시를 각각 1개씩 출력
    • length: 문자열의 길이 측정
    • length를 기준으로 내림차순 & 오름차순 정렬하고 limit 1을 사용하여 가장 짧은 길이, 가장 긴 길이를 가져온다.
    • 길이가 같은 경우 알파벳순이므로 CITY asc한다.
  • union (all) 할 때 반드시 괄호를 쳐야한다. 안그러면 에러가 난다.
    • 괄호를 사용하지 않으면 첫 번째 SELECT 문에서 LIMIT이 적용되지 않고, 전체 결과 집합이 반환됩니다. 그런 다음 두 번째 SELECT 문이 실행되고 그 결과에 LIMIT이 적용됩니다.
    • 결과적으로 첫 번째 SELECT 문에서는 하나의 행이 반환되지만 두 번째 SELECT 문에서는 전체 테이블에서 가장 긴 도시 이름에 해당하는 하나의 행이 반환됩니다.
    • 그러나 괄호를 사용하면 각 SELECT 문에서 LIMIT이 정확히 적용되어 하나의 행씩 반환됩니다. 이것이 UNION (ALL)을 사용할 때 괄호를 사용하는 이유 중 하나입니다. 괄호를 사용하면 각 SELECT 문이 개별적으로 실행되어 결과가 병합되기 때문에 각 SELECT 문에 LIMIT이 적용됩니다.
    • 따라서 괄호를 사용하지 않으면 예상한 대로 동작하지 않고, 올바른 결과를 얻기 위해 괄호를 사용해야 합니다.

 

2. 코드(MySQL)

(select CITY,  length(CITY)
from STATION
order by length(CITY) asc, CITY asc
limit 1)

union all

(select CITY,  length(CITY)
from STATION
order by length(CITY) desc, CITY asc
limit 1)
;
728x90
반응형