generate_series
함수는 특정 value에 따라 행의 개수를 늘리기 위해 사용한다.
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번 지급이 되어야 한다.
이를 해결하기 위해 아래와 같이 단계별로 나누어 생각했다.
select
t1.id,
sum(t1.amount) / 5000 cnt
from t1
group by t1.id;
그러면 아래와 같이 테이블이 생성될 것이다.
[테이블2]
id | cnt
1234 | 1
1330 | 4
1550 | 5
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 |
참고한 자료