데이터 분석

[Day 5] solvesql | Advent of SQL 2024 | '_'가 포함되지 않은 데이터 찾기💡 본문

SQL/solvesql

[Day 5] solvesql | Advent of SQL 2024 | '_'가 포함되지 않은 데이터 찾기💡

딱한아이 2024. 12. 5. 17:13
언더스코어(_)가 포함되지 않은 데이터 찾기

 

문제 조건 

1. page_location 컬럼의 값이 '_'를 포함하지 않는 경우만 출력

2. 중복되는 값은 한 번만 나오도록 하며 오름차순으로 정렬

3. 결과는 page_location만 출력

 

Solution

 

(1)

-- SQLite
SELECT DISTINCT page_location
FROM ga
WHERE page_location NOT LIKE '%\_%' ESCAPE '\'
ORDER BY 1

-- MySQL, PostgreSQL
SELECT DISTINCT page_location
FROM ga
WHERE page_location NOT LIKE '%\_%'
ORDER BY 1

 

NOT LIKE 절을 사용해  '_' 를 포함하지 않는 값을 찾는다.

'_'는 LIKE 절에서 단일 문자를 대체하는 '와일드 카드'의 의미로 사용되는 문자이기 때문에, 이를 일반 문자로 해석하려면 ESCAPE를 활용해야 한다. 즉, 역슬래시(\)를 ESCAPE 문자로 사용하겠다!

 

_ 언더바를 탈출시켜 주겠다는 의미로 '\_'를 적어 주는 것임.

 

✅ 추가로 SQLite의 경우,  다른 DBMS와 다르게 반드시 어떤 문자를 ESCAPE 문자로 사용할 것인지 꼭 서술해야 한다.

https://datarian.io/blog/sql-escape-like-wildcard

 

(2)

SELECT DISTINCT page_location
FROM ga
WHERE INSTR(page_location, '_') = 0
ORDER BY 1

 

INSTR 함수는 문자열 내 특정 문자열 존재 여부를 확인하여, 해당 문자가 존재하면 그 위치를 반환한다.

따라서 '_' 가 없는 경우 0을 반환하므로, 이를 활용해 조건을 설정할 수 있다.

 

(3)

SELECT DISTINCT page_location
FROM ga
WHERE page_location NOT REGEXP '_'
ORDER BY page_location

 

정규표현식을 활용하여 언더스코어가 포함되지 않은 데이터를 찾는다.

✔️ 0206 0808 복습