길이를 반환하는 Length()함수

dorongpark·2024년 6월 17일
0

해커랭크(sql)

목록 보기
9/20

테이블 설명 :

가장 문자의 길이가 짧은 도시와, 그 길이
가장 길이가 긴 도시와 그 길이를 반환하게끔 하면 된다

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

  • 해당 쿼리를 돌릴시 오류가 뜨는 사유1 :
    - shortestcity as (SELECT CITY, --
    MIN(len_city)
    FROM length

    ORDER BY CITY
    LIMIT 1

: 가장 짧은 길이의 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

profile
야 너도 분석 할수 있어

0개의 댓글