예제에는 SUM(), AVG(), COUNT(), MAX 및 MIN()과 같은 함수가 포함됩니다. 그러나 SQL의 집계 함수에 대해 알 수 있는 한 가지는 숫자 연산에 맞춰져 있다는 것입니다.
그런데 문자열 값을 처리하는 집계 함수가 있다는 것을 알고 계셨나요? 이 튜토리얼에서는 이러한 기능과 작동 방식, 데이터베이스에서 이를 사용하는 방법을 살펴보겠습니다.
참고: 이 게시물에서 논의되는 대부분의 함수는 표준 SQL의 일부가 아니라는 점을 참고하세요. 결과적으로 PostgreSQL, SQL Server 등과 같은 다양한 데이터베이스 엔진의 확장입니다.
문자열 집계 함수란 무엇입니까?
문자열 집계 함수는 그룹 또는 행 내의 문자열 집합에 대해 집계 작업을 수행하고 단일 결과를 반환하는 함수 집합입니다.
우리는 주로 GROUP BY 절과 함께 이러한 함수를 사용하여 특정 열을 기준으로 행을 그룹화한 다음 각 그룹의 문자열을 집계합니다.
몇 가지 일반적인 문자열 집계 함수는 다음과 같습니다.
- GROUP_CONCAT() – PostgreSQL 및 MySQL
- STRING_AGG – SQL 서버
- ARRAY_AGG – PostgreSQL
- LISTAGG - 오라클
각 기능과 그것이 제공하는 기능을 살펴보겠습니다.
GROUP_CONCAT()
GROUP_CONCAT() 함수는 PostgreSQL 및 MySQL 데이터베이스에서 지원됩니다. 이를 통해 여러 행의 값을 단일 문자열로 연결할 수 있습니다.
다음과 같은 'employees' 테이블이 있다고 가정해 보겠습니다.
CREATE TABLE 직원(직원 ID INT AUTO_INCREMENT 기본 키,
이름 VARCHAR(50),
성 VARCHAR(50),
부서 VARCHAR(50)
);
INSERT INTO 직원(이름, 성, 부서) VALUES
('앨리스', '스미스', '인적 자원'),
('밥', '존슨', '마케팅'),
('찰리', '윌슨', '금융'),
('데이비드', '브라운', '판매'),
('에바', '데이비스', '엔지니어링');
산출:
이름을 가져와 성과 이름을 연결하여 직원의 전체 이름을 확인하려면 다음 예제와 같이 GROUP_CONCAT() 함수를 사용할 수 있습니다.
선택하다부서,
GROUP_CONCAT(first_name, ' ', last_name) AS 전체 이름
에서
직원
그룹 기준
부서;
이 경우 함수를 사용하여 'first_name' 및 'last_name' 열의 문자열을 연결하고, 빈 문자열을 사용하여 이름에 공백을 추가합니다.
여기에는 각 부서의 직원 목록이 포함되어 있습니다.
STRING_AGG
이 함수는 GROUP_CONCAT() 함수와 유사하지만 SQL Server 데이터베이스에서만 지원됩니다.
사용 예는 다음과 같습니다.
선택하다부서,
STRING_AGG(이름, 성, ' ') AS 전체 이름
에서
직원
그룹 기준
부서;
지정된 열을 구분 기호로 공백으로 문자열 연결을 수행합니다.
ARRAY_AGG
ARRAY_AGG 함수는 PostgreSQL 데이터베이스에서만 사용할 수 있습니다. 이를 통해 값을 단일 배열로 집계할 수 있습니다.
예는 다음과 같습니다.
선택하다부서,
ARRAY_AGG(first_name) AS 직원_목록
에서
직원
그룹 기준
부서;
그러면 직원 이름이 배열로 집계되어야 합니다.
목록()
LISTAGG() 함수는 Oracle 데이터베이스에서만 사용할 수 있습니다. 이를 통해 지정된 구분 기호를 사용하여 값을 단일 문자열로 연결할 수 있습니다.
예는 다음과 같습니다.
SELECT 부서, LISTAGG(first_name, last_name, ' ') WITHIN GROUP (ORDER BY Employee_name ASC) AS 직원직원으로부터
부서별 그룹;
이는 직원의 이름과 지정된 구분 기호를 연결합니다.
결론
이 튜토리얼에서는 문자열 값 목록을 제공하고 단일 결과 문자열 값에 대한 작업을 수행할 수 있는 문자열 집계 함수에 대해 배웠습니다.