HackerRank; Weather Observation Station 6~

랜디 Randy·2023년 11월 18일
0

SQL 문제풀이

목록 보기
3/20

Weather Observation Station 6

SQLD 시험을 친 직후에 이 문제를 보니 속이 다 울렁거리는군요.

-- answer 1
SELECT DISTINCT CITY FROM STATION
WHERE CITY LIKE 'a%'
    OR CITY LIKE 'e%'
    OR CITY LIKE 'i%'
    OR CITY LIKE 'o%'
    OR CITY LIKE 'u%';
--
-- answer 2
SELECT DISTINCT CITY FROM STATION
WHERE CITY REGEXP '^[aeiou]';
--
-- answer 3
SELECT DISTINCT CITY FROM STATION
WHERE LEFT(CITY, 1) IN ('a', 'e', 'i', 'o', 'u');
--

제가 이 문제를 좀 헤매서 구글링을 했는데요, 다양한 답을 찾아서 여러 답을 들고왔습니다.

첫 번째는 소위 말해 노가다 방법입니다.
우선 DISTINCT는 중복이 없게 처리하는 문법이고,
LIKE는 뒤의 표현식에 따라 이 표현식에 맞는 결과값만을 가져다줍니다.
우리는 문제에서 제시한 조건에 맞게 aeiou로만 시작하는 도시 이름을 설정한거죠.

두 번째는 정규표현식을 활용한 방법입니다.
REGEXP이 함수가 정규표현식을 sql에서 사용할 수 있게 해주는 방법입니다.
^[]의 경우, ^[]를 따로 보아야 합니다.
^는 뒤에 오는 패턴으로 시작하는 문자열을 찾고,
[]는 대괄호 안에 패턴을 넣을 수 있습니다.
따라서 ^[aeiou]라고 하게된다면 aeiou로 시작하는 문자열을 찾게됩니다.
정규표현식이 외우기가 어렵지, 외우고 나면 활용도가 참 높은 방법인 것 같습니다.

세 번째는 문자열의 위치를 이용한 방법입니다.
LEFT(CITY, 1)이라는건 CITY의 왼쪽에서 첫 번째 문자를 뜻하는 것입니다.
따라서 이 문자가 aeiou중 하나에 해당한다면 조건에 맞게 되는 것이지요.

Weather Observation Station 7

-- answer 1
SELECT DISTINCT CITY
FROM STATION
WHERE RIGHT(CITY, 1) IN ('a', 'e', 'i', 'o', 'u');
--
-- answer 2
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '[aeiou]$';
--

6번에서 사용했던 첫 번째 방법은 %의 위치만 바꿔주면 됩니다. '%a'라고 한다면 문자열의 끝에 a가 들어간단 소리지요.
그 외에 똑같이 정규표현식을 사용한 방법도 있고, RIGHT를 사용하면 오른쪽에서부터 문자열을 나열하게 됩니다.

profile
데이터는 계단, 직관은 다리

0개의 댓글