[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 |