[MySQL] group_concat

resilient

·

2021. 3. 1. 17:27

728x90
반응형

[MySQL group_concat]

mysql 문법중 GROUP_CONCAT은 GROUPING된 레코드들을 원하는 구분자를 이용하여 문자열로 만들 수 있다.

group_concat 사용하기

group_concat은 같은 내용의 컬럼을 가진 데이터들을 한 로우에 나타낼 수 있도록 하게 해준다.

SELECT GROUP_CONCAT( 필드명 SEPARATOR "구분자") FROM 테이블명
GROUP BY 그룹할 필드명;

위와 같이 기본 문법을 나타낼 수 있다.

select Feed.feedIdx         as '피드인덱스',
       userProfilePicture   as '피드올린유저프로필사진',
       User.usernickName    as '피드올린유저닉네임',
       User.userNickNameIdx as '피드올린유저인덱스',
       caption              as '피드 캡션',
       likeCount            as '좋아요합계',
       commentLikeCount     as '댓글 개수',
       mediaIdx             as '미디어 번호',
       group_concat(mediaURL SEPARATOR '-')     as '피드올라간 사진/영상 URL',
       com.commentIdx       as '첫번째 댓글 인덱스',
       com.commentText      as '첫번째 댓글 내용',
       com.userNickNameIdx  as '첫번째 댓글 유저닉네임번호',
       com.userNickName     as '첫번째 댓글 유저 닉네임',
       feedCreateDate
from Feed
         inner join Media on Feed.feedIdx = Media.feedIdx
         inner join User on Feed.userNickNameIdx = User.userNickNameIdx
         left join (select feedIdx, count(feedIdx) likeCount,likeStatus from Liked where likeStatus='L' group by feedIdx) 좋아요
                    on Feed.feedIdx = 좋아요.feedIdx
         left join (select Comment.feedIdx, count(commentIdx) commentLikeCount from Comment group by feedIdx) 댓글수
                    on Feed.feedIdx = 댓글수.feedIdx
         left join (select commentIdx, commentText, User.userNickNameIdx, userNickName, feedIdx
                     from User
                              inner join Comment C on User.userNickNameIdx = C.userNickNameIdx
                     group by feedIdx) com
                    on com.feedIdx = Feed.feedIdx

group by Media.feedIdx;
위 예시 코드는 인스타그램 클론 코딩을 할 때 피드 조회 부분에서 작성한 쿼리이다.
한 피드에 여러개의 이미지를 담고 클라이언트에게 넘겨주기 위해서 '-'을 기준으로 피드 번호가 같으면 한 로우에 여러개의 mediaURL이 들어갈 수 있게 group_concat을 이용하였다.
반응형

'Back-end > DB' 카테고리의 다른 글

[MySQL]COALESCE  (0) 2021.05.06
[MySQL] like ('%',?,'%')  (0) 2021.03.19
[MySQL]이벤트스케줄러 생성 (Event Scheduler)  (0) 2021.03.01
[MYSQL] 테이블생성,수정,삭제 CRUD  (0) 2020.12.24
[MYSQL] SQL이란?  (0) 2020.12.22