[SQL Runday] HackerRank Weather Observation Station 5

Lana Chung·2022년 4월 4일
0

SQLRunday

목록 보기
1/16
post-thumbnail

STATION 테이블에서 가장 짧은, 가장 긴 이름을 가진 도시 2개 쿼리해라 (각각의 길이와 함께)
-- 1개 이상이라면 알파벳순으로 먼저인걸로 쿼리


Key Points

  • function LENGTH()
  • 문자열 문자를 byte별로 세는 함수.
  • 영어는 상관 없지만, 한글을 계산하고 싶다면 CHAR_LENGTH()를 사용한다.

Errors

  • 서브 쿼리 사용시 "Every derived table must have its own alias"에러 발생할 경우

    • 서브 쿼리에 alias(이름)이 지정되지 않았기 때문!

      SELECT * FROM ( SELECT * FROM table )subtable

    이렇게 지정해주자.


문제 보고 가장 먼저 들었던 생각은 max, min 을 구하는 테이블을 하나 만들기.

그래서 다음과 같이 접근했음.

SELECT city, char_length(city) FROM station as a,
(
SELECT MIN(char_length(city)) as mini, 
MAX(char_length(city)) as maxi from station
) as m
WHERE char_length(city) = m.maxi
OR char_length(city) = m.mini
ORDER BY city

여기까지 하니까 min, max가 각각 조회되긴 하는데 알파벳순으로 1개씩만 나오게 여기서 어떻게 해야할지를 모르겠슴.

그래서 결국 편한 방법으로 선회.
max, min별로 테이블 쿼리해서 붙이기

SELECT city, char_length(city) as lengths FROM station
GROUP BY city
ORDER BY lengths, city
LIMIT 1;

SELECT city, char_length(city) as lengths FROM station
GROUP BY city
ORDER BY lengths DESC, city
LIMIT 1;

뭐가 더 맞는 방법인지는 모르겠지만 첫번째 방법에서 뭘 더 쓰면 될지 고민.

profile
그게 쉬운 일이었다면, 아무런 즐거움도 얻을 수 없었을 것이다.

0개의 댓글