#포스트그레 순위 함수 RANK(), DENSE_RANK() 함수 사용 방법
-SQL에서 순위 함수 RANK(), DENSE_RANK() 함수들을 사용해서 데이터 들의 순서를 매길수 있습니다.
#예시 테이블 데이터
-DDL
CREATE TABLE public."member" (
"name" varchar(20) NULL,
age numeric(10) NULL,
phone_number numeric(20) NULL,
address varchar(30) NULL,
"deleteYn" bool NULL
);
-INSERT DATA
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동2', 20, 1012345678, '부산', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동3', 30, 1012345678, '대구', false);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동4', 40, 1012345678, '대전', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동5', 50, 1012345678, '광주', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동1', 10, 1012345678, '서울', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동6', 60, 1012345678, '부산', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동7', 70, 1012345678, '대구', false);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동8', 80, 1012345678, '대전', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동9', 90, 1012345678, '광주', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동10', 100, 1012345678, '서울', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동11', 100, 1012345678, '서울', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동12', 100, 1012345678, '서울', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동13', 110, 1012345678, '서울', true);
INSERT INTO public."member"
("name", age, phone_number, address, "deleteYn")
VALUES('홍길동14', 120, 1012345678, '서울', true);
-SELECT DATA
#RANK() OVER(PARTITION BY ~ ORDER BY ~ ) 함수
-중복된 데이터들을 중복된 데이터만큼 동일 순위로 표시하고 다음 데이터는 중복데이터 숫자를 포함하고나서 매겨진 순위가 지정됩니다.
-address (주소) 를 그룹화하고 age (나이) 를 내림차순으로 순위를 매기는 쿼리입니다.
select *, rank() over(partition by address order by age desc) from member;
#결과
-빨간박스를 보시면 서울에 사는 사람들이 나이가 많은 순으로 rank가 매겨진 것을 볼 수 있습니다.
-나이가 같은 경우 동일한 순위를 나타내며 그다음 데이터는 중복데이터를 포함해서 순위가 매겨지게 됩니다.
(1,2,3,3,3,6)
#DENSE_RANK() OVER(PARTITION BY ~ ORDER BY ~ ) 함수
-중복된 데이터들을 중복된 데이터만큼 동일 순위로 표시하고 다음 데이터는 중복데이터 순위를 포함하지 않고 순위가 지정됩니다.
-address (주소) 를 그룹화하고 age (나이) 를 내림차순으로 순위를 매기는 쿼리입니다.
select *, dense_rank() over(partition by address order by age desc) from member;
#결과
-빨간박스를 보시면 서울에 사는 사람들이 나이가 많은 순으로 rank가 매겨진 것을 볼 수 있습니다.
-나이가 같은 경우 동일한 순위를 나타내며 그다음 데이터는 중복데이터를 포함하지 않고 순위가 매겨지게 됩니다.
(1,2,3,3,3,4)
댓글