STATION 테이블에서 가장 짧은, 가장 긴 이름을 가진 도시 2개 쿼리해라 (각각의 길이와 함께)
-- 1개 이상이라면 알파벳순으로 먼저인걸로 쿼리
LENGTH()
CHAR_LENGTH()
를 사용한다.서브 쿼리 사용시 "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;
뭐가 더 맞는 방법인지는 모르겠지만 첫번째 방법에서 뭘 더 쓰면 될지 고민.