SQL(Postgres) | generate_series

Jihun Kim·2022년 5월 7일
0

SQL

목록 보기
1/2
post-thumbnail
post-custom-banner

generate_series 함수

generate_series 함수는 특정 value에 따라 행의 개수를 늘리기 위해 사용한다.

generate_series 함수를 쓰게 될 상황

SQL을 사용하면서 특정 value에 따라 row의 갯수를 늘려야 할 때가 있다.

[예시 상황]
예를 들면 특정 유저에게 상품권을 지급하기 위한 "유저 id", "금액" 컬럼을 가진 테이블을 생성한 후 이를 csv 파일로 추출해야 한다. 그런데 이 때, "금액"은5000원 단위로 지급이 되어야 하기 때문에 한 id에 대해 5000원이 몇 번 지급 되어야 하는 지에 따라 행 수가 증가해야 한다. 파일 안에는 유저 id만 있으면 된다(어차피 금액은 모두 5000원으로 동일하니까).

[테이블1]
id | amount
1234 | 5000
1330 | 20000
1550 | 25000

위 테이블1에서 유저 id 1330의 경우 금액이 20000이므로 5000원씩 4번 지급이 되어야 한다.
이를 해결하기 위해 아래와 같이 단계별로 나누어 생각했다.


해결 방법

1. 금액을 5000원으로 나누어 갯수에 대한 cnt 컬럼을 생성한다.

  select
     t1.id,
     sum(t1.amount) / 5000 cnt
  from t1
  group by t1.id;

그러면 아래와 같이 테이블이 생성될 것이다.

[테이블2]
id | cnt
1234 | 1
1330 | 4
1550 | 5


2. cnt 컬럼에 대해 generate_series 함수를 사용한다.

  select t2.id
  from (select
     t1.id,
     sum(t1.amount) / 5000 cnt
  from t1
  group by t1.id) t2, generate_series(1, t2.cnt);

그러면 아래와 같이 테이블이 생성될 것이다.


[테이블2]
id |
1234 |
1330 |
1330 |
1330 |
1330 |
1550 |
1550 |
1550 |
1550 |
1550 |



참고한 자료

profile
쿄쿄
post-custom-banner

0개의 댓글