안녕하세요,
제가 근무하는 회사에서는 MySQL 을 기반으로 하는 시스템이 좀 많은 편입니다.
주로 MySQL 을 그리고 MS-SQL 을 사용했지만,
무료라는 이점과 PHP와의 궁합 문제로 MySQL 의 사용 빈도가 높았습니다.
그런데 이번에 오라클이 Sun을 인수한 것을 보고는 아무래도 DB 쪽에 대해 생각을 많이 가지게 되는 것 같습니다.
해서, 쿼리를 하나씩 변경해보고자 하는데 MySQL 함수들 때문에 몇가지 막혀 질문을 드려 봅니다.
그 중 하나로, MySQL 의 GROUP_CONCAT 함수를 이용하면,
여러 레코드 결과를 하나의 레코드 결과로 묶어 획득 할 수 있습니다.
간단한 예제로는 다음과 같습니다.
# 테이블 : user_join_groups (사용자가 가입한 그룹 정보)
group_id / Int형 / FK / 가입한 그룹의 고유번호
user_id / Int 형 / FK / 사용자 고유번호
# 테이블 : groups (그룹 메타 정보)
group_id / Int 형 / PK / 그룹 고유번호
name / Varchar / 그룹 이름
SELECT GROUP_CONCAT(DISTINCT CONCAT(B.uid,':',B.name) SEPARATOR ';') as join_group
FROM user_join_groups AS A
INNER JOIN groups AS B
ON A.group_id = B.group_id
GROUP BY A.user_id
상기 쿼리의 경우, A 테이블에서 user_id 로 group by 하여, A의 group_id 와 B의 group_id 로 join 된 결과를
하나의 레코드 결과로 만들어 줍니다.
이와 같이 여러 줄의 row 를 하나의 row 로 결과를 합쳐주는 큐브리드 내장 함수가 있는지 궁금하며,
내장 함수가 없다면 이런 것을 DB 쿼리 상에서 처리하기 위한 방법이 있는지 궁금합니다.
감사합니다.
제가 근무하는 회사에서는 MySQL 을 기반으로 하는 시스템이 좀 많은 편입니다.
주로 MySQL 을 그리고 MS-SQL 을 사용했지만,
무료라는 이점과 PHP와의 궁합 문제로 MySQL 의 사용 빈도가 높았습니다.
그런데 이번에 오라클이 Sun을 인수한 것을 보고는 아무래도 DB 쪽에 대해 생각을 많이 가지게 되는 것 같습니다.
해서, 쿼리를 하나씩 변경해보고자 하는데 MySQL 함수들 때문에 몇가지 막혀 질문을 드려 봅니다.
그 중 하나로, MySQL 의 GROUP_CONCAT 함수를 이용하면,
여러 레코드 결과를 하나의 레코드 결과로 묶어 획득 할 수 있습니다.
간단한 예제로는 다음과 같습니다.
# 테이블 : user_join_groups (사용자가 가입한 그룹 정보)
group_id / Int형 / FK / 가입한 그룹의 고유번호
user_id / Int 형 / FK / 사용자 고유번호
# 테이블 : groups (그룹 메타 정보)
group_id / Int 형 / PK / 그룹 고유번호
name / Varchar / 그룹 이름
SELECT GROUP_CONCAT(DISTINCT CONCAT(B.uid,':',B.name) SEPARATOR ';') as join_group
FROM user_join_groups AS A
INNER JOIN groups AS B
ON A.group_id = B.group_id
GROUP BY A.user_id
상기 쿼리의 경우, A 테이블에서 user_id 로 group by 하여, A의 group_id 와 B의 group_id 로 join 된 결과를
하나의 레코드 결과로 만들어 줍니다.
이와 같이 여러 줄의 row 를 하나의 row 로 결과를 합쳐주는 큐브리드 내장 함수가 있는지 궁금하며,
내장 함수가 없다면 이런 것을 DB 쿼리 상에서 처리하기 위한 방법이 있는지 궁금합니다.
감사합니다.
GROUP CONCAT 함수의 경우 CUBRID 에는 1:1 대응하는 함수는 없습니다. 단, LIST 를 사용하면 같은 결과를 얻을 수 있습니다.
사용예는 다음과 같습니다.
MYSQL QUERY 가 SELECT col_1, GROUP_CONCAT(col_2 ORDER BY col_2 desc SEPARATOR, '^') FROM tbl group by col_1; 라고 가정하면
1. 해당 컬럼이 INT 계열 컬럼일 경우
SELECT col_1, LIST(SELECT int_column || '^' FROM tbl ORDER BY int_column desc) FROM tbl group by col_1;
2. 해당 컬럼이 CHAR 계열 컬럼일 경우
SELECT col_1, LIST(SELECT trim(char_column) || '^' FROM tbl ORDER BY char_column desc) FROM tbl group by col_1;
로 응용하여 사용하실 수 있습니다.