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 퍼포먼스 간단 테스트
- 인덱싱을 사용하지 않은 LIKE, REGEXP는 모두 느리지만 REGEXP가 훨씬 느리다.
반응형
'데이터 > SQL 문제풀이' 카테고리의 다른 글
[MySQL] HackerRank SQL - Weather Observation Station 10 (0) | 2022.10.20 |
---|---|
HackerRank SQL - Weather Observation Station 9 (0) | 2022.06.21 |
HackerRank SQL - Weather Observation Station 7 (0) | 2022.06.17 |
HackerRank SQL - Weather Observation Station 6 (0) | 2022.06.15 |
HackerRank SQL - Weather Observation Station 5 (0) | 2022.06.14 |
댓글