Background Image
조회 수 28121 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
1. 설명
그룹에서 NULL 이 아닌 값들을 연결하여 결과 문자열을 VARCHAR 타입으로 반환한다. 

2. 사용방법

 GROUP_CONCAT([DISTINCT] expression [ORDER BY {column | unsigned_int} [ASC | DESC]] [SEPARATOR str_val])   

expression -- 수치 또는 문자열을 반환하는 칼럼 또는 연산식
str_val -- 구분자로 쓰일 문자열
DISTINCT -- 결과에서 중복되는 값을 제거한다.
ORDERBY -- 결과 값의 순서를 지정한다.
SEPARATOR -- 결과 값 사이에 구분할 구분자를 지정한다. 생략하면 기본값인 쉼표(,)를 구분자로 사용한다.
Return type: STRING


3. 연결한 문자열이 1024 바이트 초과할 때 주의사항
group_concat_max_len 의 설정을 따른다. 기본값은 1024 바이트이며, 최소값은 4바이트, 최대값은 33,554,432바이트이다.
이 함수는 string_max_size_bytes 파라미터의 영향을 받는데, group_concat_max_len의 값이 string_max_size_bytes의 값보다 크고 GROUP_CONCAT 함수의 결과가 string_max_size_bytes의 크기 제한을 넘으면 오류가 반환된다.
string_max_size_bytes의 기본 값은 1,048,576 바이트(1M)이고, 최대값은 33,554,432 바이트(32M)이다.

즉, 기본설정 상태에서 group_concat_max_len는 1,048,576 바이트(1M)까지 설정 할 수 있고,
1M 이상일 경우에는 string_max_size_bytes 값도 함께 변경하여야 한다.



그룹 결과의 값 사이에 사용되는 기본 구분자는 쉼표(,)이며, 구분자를 명시적으로 표현하려면 SEPARATOR 절과 그 뒤에 구분자로 사용할 문자열을 추가한다. 
구분자를 제거하려면 SEPARATOR 절 뒤에 빈 문자열(empty string)을 입력한다.


4. 인자로 사용되지 않는 컬럼으로 정렬하는 방법
ORDER BY를 이용한 정렬은 오직 인자로 사용되는 표현식(또는 칼럼)에 의해서만 가능
즉, group 처리하는 컬럼값으로만 정렬되고, 그 이외의 컬럼으로는 정렬이 불가 함
인라인뷰를 사용하여 우회하는 방법으로는 아래와 같은 방법이 있다.

select group_concat( col1 ) 
from ( 
     select col1, col2, col3 
     from grp_test 
     order by col2
     ) 
group by col3  

예제( 인덱스 컬럼의 순서로 정렬하고, 컬럼명으로 group_concat 처리 ) 
SELECT
  class_name, index_name, GROUP_CONCAT(key_col ), is_primary_key, is_foreign_key 
FROM ( SELECT B.class_name, B.index_name,B.key_order, B.key_attr_name AS key_col,   A.is_primary_key, A.is_foreign_key
       FROM  db_index_key B, db_index A 
       WHERE A.index_name = B.index_name 
       ORDER BY  B.class_name, B.index_name, B.key_order
      ) 
GROUP BY class_name, index_name 
ORDER BY class_name, index_name  ;




5. 사용 예제
SELECT GROUP_CONCAT(s_name) FROM code;  //SEPARATOR 구문 생략 시에는 ","로 구분
  group_concat(s_name)
======================
  'X,W,M,B,S,G'


SELECT GROUP_CONCAT(s_name ORDER BY s_name SEPARATOR ':') FROM code;  //SEPARATOR 값을 ":"로 지정, 정렬순서 지정
  group_concat(s_name order by s_name separator ':')
======================
  'B:G:M:S:W:X'


SELECT GROUP_CONCAT(s_name ORDER BY s_name SEPARATOR '') FROM code;  //SEPARATOR 값을 ""로 지정, 정렬순서 지정
  group_concat(s_name order by s_name separator '')
======================
  'BGMSWX'


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
74 질의작성 synonym에 대하여 김민종 2023.09.07 231
73 질의작성 VALUES 절 활용하기 황영진 2020.05.13 795
72 질의작성 여러개의 컬럼을 하나로 묶어주는 함수 CONCAT_WS 사용방법 엄기호 2019.01.29 7110
71 질의작성 입력된 날자를 이용하여 해당 주차의 모든 날자 구하기 성진 2018.04.10 1089
70 질의작성 JAVA_SP를 이용해서 정규표현식을 이용해서 치환을 하자. file 성진 2017.10.10 1304
69 질의작성 테이블 명세서 쿼리 1 성진 2017.08.04 3140
68 질의작성 loose index scan을 활용한 효과적인 쿼리 튜닝 방안 박세훈 2017.06.01 2382
67 질의작성 CONNECT BY 절 포함 질의 튜닝 예제 박세훈 2017.02.28 9695
66 질의작성 UPDATE에서 조인을 통해, 결과값 수정하는 방법 박동윤 2016.12.27 7140
65 질의작성 subquery를 이용한 튜닝예제 file 김창휘 2016.12.27 3306
64 질의작성 입력된 년월 또는 두개의 날짜을 이용하여 달력 및 주차 구하기 1 성진 2016.08.10 5546
63 질의작성 INSTR함수 사용하기 엄기호 2016.06.29 9225
» 질의작성 group_concat(문자열 그룹처리) 함수 사용하기 권호일 2016.06.29 28121
61 질의작성 두 datetime 연산결과를 "?일 ?시:?분:?초"로 표시하기 권호일 2016.05.18 6345
60 질의작성 ORACLE 테이블 및 컬럼 COMMENT 일광등록 스크립트 1 김창휘 2016.04.04 9317
59 질의작성 스키마 및 인덱스 선언에 따른 최대 용량 산정을 위한 ROW SIZE 확인 성진 2016.03.21 4167
58 질의작성 Oracle UTL_ENCODE.TEXT_ENCODE를 CUBRID로 변환하기 김창휘 2016.03.21 4625
57 질의작성 테이블 리스트 취합 SQL 김창휘 2016.03.19 5511
56 질의작성 테이블 컬럼 변경 및 추가 정만영 2016.02.29 21699
55 질의작성 FOR UPDATE 정만영 2016.01.27 5983
Board Pagination Prev 1 2 3 4 Next
/ 4

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales