by 맹꽁이 [SQL Query] Postgresql [2021.07.14 10:34:49]
DB는 PostgreSql 입니다.
No. | content |
1 | cont1 |
2 | cont2 |
3 | cont3 |
4 | cont4 |
5 | cont5 |
위와 같은 데이타가 존재하고, 이를 한번 조회를 하거나, 아님 걍 조회할때 아래와 같은 결과를 얻고 싶습니다.
중요한건 5번째, 10번째 항목인데요...즉 데이타 롤링(?) 이라는 표현이 맞나 모르겠지만요.
위 데이타를 가지고 순환(?) 하는 결과를 얻고 싶습니다.ㅜㅜ
가능할까요?? 고수님들의 조언 부탁드립니다.ㅜㅜ
DB는 PostgreSql 입니다.
group | No. | content |
1 | 1 | cont1 |
1 | 2 | cont2 |
2 | 2 | cont2 |
2 | 3 | cont3 |
3 | 3 | cont3 |
3 | 4 | cont4 |
4 | 4 | cont4 |
4 | 5 | cont5 |
5 | 5 | cont5 |
5 | 1 | cont1 |
6 | 1 | cont1 |
6 | 2 | cont2 |
7 | 2 | cont2 |
7 | 3 | cont3 |
8 | 3 | cont3 |
8 | 4 | cont4 |
9 | 4 | cont4 |
9 | 5 | cont5 |
10 | 5 | cont5 |
10 | 1 | cont1 |
11 | 1 | cont1 |
11 | 2 | cont2 |
PostgreSql 은 테스트 환경이 없어서
MariaDB 에서 유사하게 테스트 해뵜습니다.
PostgreSql 은 테스트 되지 않은 구문입니다. 수행 결과 피드백 부탁드려요.
-- MariaDB -- WITH t AS ( SELECT 1 no, 'cont1' content UNION ALL SELECT 2, 'cont2' UNION ALL SELECT 3, 'cont3' UNION ALL SELECT 4, 'cont4' UNION ALL SELECT 5, 'cont5' ) SELECT * FROM seq_1_to_11 INNER JOIN t ON no IN ((seq-1)%5+1, seq%5+1) ORDER BY seq, CASE WHEN no = (seq-1)%5+1 THEN 1 ELSE 2 END ; -- PostgreSql -- WITH t AS ( SELECT 1 no, 'cont1' content UNION ALL SELECT 2, 'cont2' UNION ALL SELECT 3, 'cont3' UNION ALL SELECT 4, 'cont4' UNION ALL SELECT 5, 'cont5' ) SELECT * FROM generate_series(1, 11) seq INNER JOIN t ON no IN ((seq-1)%5+1, seq%5+1) ORDER BY seq, CASE WHEN no = (seq-1)%5+1 THEN 1 ELSE 2 END ;