반응형
rownum
Postgres 에서도 Oracle의 rownum을 사용 할 수 있을까요? 가능합니다. row_number()를 이용하면 됩니다.
그럼 아래 처럼 그냥 호출 하면 rownum을 사용 할 수 있을 것 같지만..
select row_number(), i.*
from item i;
![1](https://raw.githubusercontent.com/Shane-Park/mdblog/main/backend/db/postgres/subqueryUpdate.assets/image-20211119145307908.webp)
윈도우 함수 호출에는 OVER 절이 필요함 이라는 에러가 나옵니다.
딱히 조건을 걸 생각이 없었지만 그래도 over절은 넣어줘야 하나 봅니다.
그럼 이렇게 작성 한다면 rownum을 사용 할 수 있습니다. as로 alias 를 주는것도 좋겠네요.
select row_number() over(), i.*
from item i;
Subquery를 통한 update
이제 rownum을 받아 왔으니, 서브쿼리에서 rownum을 활용 해서 일괄 업데이트를 해 보겠습니다.
update product
set title = subquery.title
from ( select d.id, '상품' || (row_number() over()) as title
from product d ) as subquery
where product.id = subquery.id;
위와 같이 작성해 update를 하면, 상품1, 상품2, 상품3, ... 으로 모든 상품 명이 업데이트 됩니다.
원하는 정렬 기준이 있다면 서브쿼리 안에서 orderby를 넣으면 되지만, rownum의 특성 상 정렬 후에 한번 더 감싸서 사용 해 주어야 합니다.!
rownum을 활용해서 DB에 dummy 데이터를 넣을때 유용하게 사용 할 수 있습니다!
반응형
'Data > PostgreSQL' 카테고리의 다른 글
할 때마다 까먹어서 정리하는 PSQL 접속 방법 (0) | 2023.01.04 |
---|---|
[POSTGRES] 전체 테이블, 컬럼 정보 조회 (0) | 2022.07.26 |
Postgres) 계층형 쿼리작성 및 csv로 결과 저장하기 (0) | 2021.12.02 |
PostgreSQL) 모든 테이블에서 특정 값 찾기 (0) | 2021.10.08 |
MacOS PostgreSQL 설치 하고 테이블 생성, 조회하기 (0) | 2021.08.04 |