데이타 롤링(?)...데이타 순환(?) 해당 표현이 맞는지 모르겠지만, 고수님들의 도움이 필요합니다. 0 2 703

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
by 마농 [2021.07.14 11:31:02]

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
;

 


by 맹꽁이 [2021.07.15 10:40:25]

감사합니다. 마농님 ^^;;

PostgresSQL에서 아주 잘 수행됩니다.~
해당 SQL 응용해서 다른 부분도 적용 잘 하였습니다..

너무 감사합니다.~~

코로나로 어려운 시국인데, 건강 유의 잘 하시길 바랍니다.~~^^;

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입