본문 바로가기
개발 이야기/Database

[Postgresql] 그룹별 최소값, 최대값 구하기

by 강한페페 2021. 1. 26.
반응형

 

SELECT [col1], ... , [coln]
FROM (
    SELECT [col1], ... , [coln],
        ROW_NUMBER() OVER(PARTITION BY [col1] ORDER BY [coln] ASC) as index
    FROM [table]
) AS res
WHERE index = 1

그룹분류를 원하는 컬럼은 col1, 구해야 할 최소 최대값 컬럼은 coln 에 위치한다.

그룹별 분류 및 최소, 최대값을 가져오기 위한 정렬 후 함께 SELECT를 원하는 컬럼은 col1, coln 사이에 위치시킨다.

 

Example)

bgroupseq ... bmanagerranking
1 ... 100
1 ... 200
1 ... 300
2 ... 100
2 ... 200
3 ... 100
3 ... 200

 

SELECT bgroupseq, ..., bmanagerranking 
FROM ( 
    SELECT bgroupseq, ..., bmanagerranking
        ROW_NUMBER() OVER(PARTITION BY bgroupseq ORDER BY bmanagerranking ASC) as index
    FROM board
) AS manager 
WHERE index = 1

 

bgroupseq ... bmanagerranking
1 ... 100
2 ... 100
3 ... 100

- bgroupseq 컬럼에 존재하는 동일한 값을 그룹으로 묶고 그룹별로 정렬(ORDER BY bmanagerranking ASC) 후 첫번째 값을 가져온다.

- 정렬방식 ASC : 최소값, DESC : 최대값

- 이외에 SELECT를 원하는 컬럼들은 bgroupseq, bmanagerranking 사이에 위치시키면 된다.

반응형