본문 바로가기
데이터/SQL 문제풀이

HackerRank SQL - Weather Observation Station 8

by 찌노오 2022. 6. 18.

 

 

Query the list of CITY names from STATION which have vowels (i.e., a, e, i, o, and u) as both their first and last characters. Your result cannot contain duplicates.

 

 

Problem

STATION의 테이블에서 모음으로 시작하면서 끝나는 CITY명만 출력하라.

단, 중복은 제외하라.


Answer1

SELECT CITY
FROM STATION
WHERE CITY REGEXP '[aeiou]$' and CITY REGEXP '^[aeiou]\w*'
GROUP BY CITY

Answer2

SELECT CITY
FROM STATION
WHERE CITY REGEXP '^[aeiou].*[aeiou]$'
GROUP BY CITY

 

 

 


How to solve

WHERE절에 or이나 | 붙이면 될 줄 알았는데 Wrong Answer를 뱉어낸다.

SELECT CITY
FROM STATION
WHERE CITY REGEXP '[aeiou]$' or CITY REGEXP '^[aeiou]\w*' # 이것도 안되네 '[aeiou]$|^[aeiou]\w*'
GROUP BY CITY

 

 

문제를 다시 읽어보니 both였네..

그럼 and만 바꿔주면 되는 문제였는데 정규식으로 한 번에 하려면 어떻게 해야 될지 좀 더 살펴보기로 했다.

 

or 조건은 '|expr' 로 알고 있는데 and 조건은 '(?=expr)'이라고 한다.

WHERE절에  "CITY REGEXP '(?=[aeiou]$)(?=^[aeiou]\w*)'" 넣어봤는데 안되네?

 

다시 생각해보니, and 조건이 의미가 없구나.

'^[aeiou]\w*[aeiou]$' 이렇게 넣으면 된다. 가끔 이렇게 생각이 갇혀버릴 때가 있다.

또 틀렸다. ID값에 중간 공백이 있는 친구들이 있어서 이 친구들을 다시 걸러줘야되니 W로 구분할 수 없다.

 

다음과 같이 작성했다. 참 먼길을 돌아왔네.

SELECT CITY
FROM STATION
WHERE CITY REGEXP '^[aeiou].*[aeiou]$'
GROUP BY CITY

 

 

추가로 REGEXP 를 쓸지 WHERE절 LIKE구문을 쓸지 문득 성능이 궁금해졌는데 아래와 같은 레퍼런스를 찾았다.

지금은 저걸 완전히 이해할만큼의 실력이 안돼서 일단 결론만 이해하고 담아둔다.


MySQL REGEXP 퍼포먼스 간단 테스트
 

MySQL REGEXP 퍼포먼스 간단 테스트

최근 하나의 테이블 내에 몇 개의 칼럼 중에서 간단한 검색 기능을 구현하는 요구 사항을 처리할 일이 있었습니다. 검색 기능에는 full text search(전문검색)를 사용해야 한다는 말을 들어왔지만 단

engineering.huiseoul.com

- 인덱싱을 사용하지 않은 LIKE, REGEXP는 모두 느리지만 REGEXP가 훨씬 느리다.

 

 

 

 

 

반응형

댓글