문제 설명
GA 로그의 page_location 컬럼에서
언더스코어(_)가 포함되지 않은 페이지 경로만 조회
해야 한다.
추가 조건
- 중복 제거
- 오름차순 정렬
내가 작성한 코드
SELECT page_location
FROM ga
WHERE page_location NOT IN (
SELECT page_location
FROM ga
WHERE page_location LIKE '%_%'
)
왜 틀렸을까?
문제는 여기.
LIKE '%_%'
많은 사람들이
_ 가 포함된 문자열
이라고 생각한다.
하지만 SQL에서는 다르다.
LIKE의 와일드카드
%
LIKE '%abc%'
의미
abc를 포함하는 문자열
_
LIKE '_'
의미
임의의 문자 1개
실제 언더스코어 찾는 방법
언더스코어를 문자 그대로 찾으려면
escape 처리 필요.
MySQL
LIKE '%\_%'
또는
LIKE '%$_%' ESCAPE '$'
정답
SELECT DISTINCT page_location
FROM ga
WHERE page_location NOT LIKE '%\_%'
ORDER BY page_location;
기억할 포인트
%
↓
0개 이상 문자
_
↓
임의의 문자 1개
\_
↓
실제 언더스코어 문자
한 줄 요약
이 문제의 함정은 _가 언더스코어 문자가 아니라 LIKE의 와일드카드라는 점이다. 실제 언더스코어를 찾으려면 LIKE '%\_%'처럼 escape 처리를 해야 하며, 언더스코어가 없는 데이터는 NOT LIKE '%\_%'로 조회한다.
'TIL' 카테고리의 다른 글
| [TIL159] solvesql - 전력소비량 이동평균 구하기 (0) | 2026.06.19 |
|---|---|
| [TIL158] solvesql - 요일별 대기오염도 (0) | 2026.06.19 |
| [TIL156] solvesql - 세션 재정의하기 (0) | 2026.06.18 |
| [TIL155] solvesql - 데이터 그룹으로 묶기 (0) | 2026.06.18 |
| [TIL154] solvesql - 배송예정일 예측 성공과 실패 (0) | 2026.06.18 |