쿼리 질문드립니다. 0 2 622

by 후인구 POSTGRESQL [2021.09.06 21:15:14]


SEQ NBA_CD SOSOK COMBO SOSOK2
1 ET1 LAL I CLE
2 ET1 LAL I BOS
3 ET1 LAL L ATL
4 ET1 LAL L CHA
5 ET1 LAL L CHI
6 ET1 LAL R DET

TABLE명 : TB_NBA

원하는 쿼리 결과 값 :  (((((( LAL+CLE(I) ) + BOS(I)) + ATL(L)) + CHA(L)) + CHI(L)) + DET(R))

 

SELECT NBA_CD, SOSOK, SOSOK2||'('||COMBO||')' AS SOSOK2 FROM TB_NBA

ORDER BY SEQ ASC 

 

SOSOK을 기준으로 세로로 조회하면 6건 조회되는데 가로로 위와 같은 결과를 얻어내려고 합니다.

첫번째 row 결과 : LAL+CLE(I)

두번째 row 결과 : ((LAL+CLE(I))+BOS(I))

세번째 row 결과 : (((LAL+CLE(I))+BOS(I))+ATL(L))

네번째 row 결과 : (((( LAL+CLE(I) ) + BOS(I)) + ATL(L)) + CHA(L))

다섯번째 row 결과 : ((((( LAL+CLE(I) ) + BOS(I)) + ATL(L)) + CHA(L)) +  CHI(L))

마지막 row 결과 : (((((( LAL+CLE(I) ) + BOS(I)) + ATL(L)) + CHA(L)) + CHI(L)) + DET(R))

 

DB는 POSTGRESQL 입니다.

 

ARRAY_TO_STRING(ARRAY_AGG(SOSOK2||'('||COMBO||')'),'+') 함수를 사용하여

가로를 세로로 정렬해야 되는데

쿼리문으로 어떻게 구현해야 되는지 궁금해요.

 

by 마농 [2021.09.07 07:39:21]

1. 어차피 더하기(+)는 순서가 중요하지 않은데 굳이 괄호를 계속 붙여야 하는지?
2. 원하는 결과가 1줄인지? 여러줄인지?


by 마농 [2021.09.07 09:12:17]
WITH tb_nba AS
(
SELECT 1 seq, 'ET1' nba_cd, 'LAL' sosok, 'I' combo, 'CLE' sosok2
UNION ALL SELECT 2, 'ET1', 'LAL', 'I', 'BOS'
UNION ALL SELECT 3, 'ET1', 'LAL', 'L', 'ATL'
UNION ALL SELECT 4, 'ET1', 'LAL', 'L', 'CHA'
UNION ALL SELECT 5, 'ET1', 'LAL', 'L', 'CHI'
UNION ALL SELECT 6, 'ET1', 'LAL', 'R', 'DET'
)
SELECT nba_cd
     , LPAD('(', COUNT(*)::INT, '(') || sosok ||'+'||
       ARRAY_TO_STRING(ARRAY_AGG(sosok2 ||'('|| combo ||'))' ORDER BY seq), '+') x
  FROM tb_nba
 WHERE nba_cd = 'ET1'
   AND sosok  = 'LAL'
 GROUP BY nba_cd, sosok
;

 

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