들어가기 🤔
여러 개의 데이터 중 중복된 결과를 제거하고 각 그룹에 첫 번째 행을 선택하고 싶은 쿼리를 작성 중..
새로운 함수를 알게 되었다.
최초 PARTITION BY를 이용하여 그룹의 첫 번째 행을 가져오려고 했으나!
postgresql에서만 이를 대신하는 자체적인 함수가 있다.
그것은 바로 DISTINCT ON 함수!
해당 함수에 대해 알아보자!
DISTINCT ON 쿼리
👉 키포인트!
SELECT DISTINCT ON (column1, column2, ...)
column1, column2, ..., other_columns
FROM table_name
WHERE condition
ORDER BY column1, column2, ..., other_columns;
1. DISTINCT ON(columns)
- 지정된 열들은 중복을 제거할 기준 칼럼입니다. 즉’DISTINCT ON’에 포함된 열의 조합이 동일한 행들은 하나로 지정됩니다.
2. ORDER BY
- ‘ORDER BY’ 절은 어떤 행이 선택될지를 결정하는 데에 역할을 합니다. ‘ORDER BY’ 절에서 지정한 순서대로 행이 정렬되며, 각 그룹에서 첫 번째 행이 결과에 포함됩니다.
👉 예시쿼리 (DISTINCT ON)
✨ 각 교실 중 제일 높은 학생의 데이터를 추출
SELECT DISTINCT ON (class)
class, --교실
name, --이름
score --점수
FROM students --학생
ORDER BY class, score DESC;
👉 예시쿼리 (PARTITION BY)
SELECT ROW_NUMBER() OVER (PARTITION BY class ORDER BY score DESC) as rm,
class,
name,
score
FROM students
WHERE rm = 1
ORDER BY class;
'DB' 카테고리의 다른 글
[PostgreSQL] POSITION 함수 사용법 (0) | 2025.04.15 |
---|---|
[PostgreSQL] DATE_TRUNC (0) | 2025.02.07 |
[PostgreSQL] DELETE JOIN문 (1) | 2024.07.05 |