테이블 설명 :
가장 문자의 길이가 짧은 도시와, 그 길이
가장 길이가 긴 도시와 그 길이를 반환하게끔 하면 된다
ex)
abc 3
set 3
xya 3
asdf 4
이렇게 테이블이 구성된다고 하면
abc 3
asdf 4 이렇게 반환되야 한다
첫번째 생각
"테이블을 세개로 나눠야 하며
1) 테이블에 city의 길이를 반환하는 컬럼을 추가한 테이블
2) 짧은 길이 반환한 테이블
3) 긴 길이 반환한 테이블
로 구성되어야 한다"
1) 테이블에 city의 길이를 반환하는 컬럼을 추가한 테이블
SELECT CITY, length(CITY) as length
FROM STATION
2) 짧은 길이 반환한 테이블
SELECT CITY, length
FROM temp
WHERE length = (select min(length) from temp)
order by CITY
LIMIT 1
3) 긴 길이 반환한 테이블
SELECT CITY, length
FROM temp
WHERE length = (select max(length) from temp)
order by CITY
LIMIT 1
두번째 생각:
"서브 쿼리와 union all을 활용하여 데이터를 합치자"
WITH temp as
(SELECT CITY, length(CITY) as length
FROM STATION ),
shortest_city as
(SELECT CITY, length
FROM temp
WHERE length = (select min(length) from temp)
order by CITY
LIMIT 1
),
longest_city as
(SELECT CITY, length
FROM temp
WHERE length = (select max(length) from temp)
order by CITY
LIMIT 1
)
SELECT FROM shortest_city
UNION ALL
SELECT FROM longest_city
※ 오류 안내
WITH length as(
SELECT CITY,
LENGTH(CITY) as len_city
FROM STATION ),
shortest_city as (SELECT CITY, --
MIN(len_city)
FROM length
ORDER BY CITY
LIMIT 1 ), -- 단독 서브쿼리 사용1
longestcity as (SELECT CITY,
MAX(len_city)
FROM length
ORDER BY CITY
LIMIT 1 )-- 단독 서브쿼리 사용2
SELECT FROM shortest_city
UNION ALL
SELECT FROM longest_city
: 가장 짧은 길이의 CITY를 반환 하지만, CITY에 대한 명확한 처리 체계가 없어 오류 발생함. 컬럼 1개(CITY와 함께 사용했으므로)
: 해당 단독 서브 쿼리를 사용해서 정답이 되는 방법
WITH length as(
SELECT CITY,
LENGTH(CITY) as len_city
FROM STATION ),
shortest_city as (SELECT CITY,
MIN(len_city)
FROM length
GROUP BY 1 --- 도시별로 그룹핑
ORDER BY 2,1 -- 가장 짧은 도시길이, 알파벳 순서대로 도시 정렬
LIMIT 1 ),
longestcity as (SELECT CITY,
MAX(len_city)
FROM length
GROUP BY 1 --- 도시별로 그룹핑
ORDER BY 2 DESC,1 -- 가장 길은 도시길이, 알파벳 순서대로 도시 정렬
LIMIT 1 )
SELECT FROM shortest_city
UNION ALL
SELECT FROM longest_city