728x90
PostgreSQL에서 특정 숫자형 컬럼이 순차적으로 증가하는 경우, 중간에 비어있는 값(누락된 값)을 찾으려면 generate_series()를 활용할 수 있어.
방법 1: generate_series() 활용
WITH missing_numbers AS (
SELECT generate_series(MIN(id), MAX(id)) AS num
FROM your_table
)
SELECT num
FROM missing_numbers
LEFT JOIN your_table ON missing_numbers.num = your_table.id
WHERE your_table.id IS NULL;
✅ 설명
- generate_series(MIN(id), MAX(id))를 사용해 id 컬럼의 최소값부터 최대값까지의 연속된 숫자 시리즈를 생성.
- 이 시리즈를 원래 테이블과 LEFT JOIN 한 후, id IS NULL인 값을 찾으면 누락된 번호만 조회 가능.
방법 2: LAG() 으로 직접 비교
만약 ID가 반드시 오름차순으로 정렬되어 있다고 가정하면, LAG()를 활용하는 것도 가능해.
SELECT prev_id + 1 AS missing_id
FROM (
SELECT id, LAG(id) OVER (ORDER BY id) AS prev_id
FROM your_table
) subquery
WHERE id - prev_id > 1;
✅ 설명
- LAG(id) OVER (ORDER BY id)를 사용해 이전 행의 id 값을 가져옴.
- 현재 id - prev_id > 1 인 경우, 그 사이에 누락된 값이 있다는 의미이므로 prev_id + 1 을 결과로 반환.
이 방법은 중간에 한 개의 값만 빠진 경우만 감지할 수 있고, 여러 개 연속으로 빠진 경우는 한 개만 출력되므로 주의해야 해.
LIST
'Develop' 카테고리의 다른 글
[PostgreSQL] EXISTS 쿼리 사용법과 예제 (0) | 2025.02.06 |
---|---|
SQL INSERT 문에서 싱글 쿼테이션 입력하는 방법 (1) | 2025.02.05 |
[PostgreSQL] UNIQUE Key 생성 방법 총정리 (0) | 2025.02.04 |
TinyMCE 에디터 사용 방법과 이미지 첨부 커스텀마이징 (1) | 2025.01.22 |
[PostgreSQL] SELECT 데이터를 INSERT하는 방법 (2) | 2025.01.22 |