Home
home
🏡 홈
home

[SQL] 같은 그룹내 문자열 비교

분류
개발지식
태그
SQL
작성자
작성일
2024/10/31 11:52
로그처럼 특정키를 기준으로 문자열을 저장할 때, 변경된 문자열이 일치하는지 여부를 확인하고 싶을때가 있습니다. 이런경우 활용할 만한 쿼리문을 소개합니다.
상품의 이력을 관리하는 테이블이 있다고 가정해봅시다.
CREATE TABLE products ( product_code VARCHAR(20), -- 상품 코드 text VARCHAR(255), -- 상품에 대한 텍스트 registration_date DATE -- 등록일 );
SQL
복사
그리고, 상품의 설명의 이력을 날짜별로 저장했습니다.
INSERT INTO products (product_code, text, registration_date) VALUES ('P001', 'Product A Description', '2024-10-01'), ('P001', 'Different Product A Description', '2024-10-05'), ('P002', 'Product B Description', '2024-10-02'), ('P003', 'Product C Description', '2024-10-03'), ('P003', 'Different Product C Description', '2024-10-04');
SQL
복사
여기서, 상품의 설명이 변경된 상품코드를 검색하고 싶을 수 있습니다.

서로 다른 텍스트 찾기 쿼리

같은 product_code 그룹 내에서 텍스트가 다른 경우를 찾아 출력합니다.
SELECT product_code, GROUP_CONCAT(DISTINCT text ORDER BY registration_date ASC) AS unique_texts FROM products GROUP BY product_code HAVING COUNT(DISTINCT text) > 1;
SQL
복사

출력 예시

위 쿼리를 실행하면 다음과 같은 결과가 나옵니다.
product_code
unique_texts
P001
Product A Description, Different Product A Description
P003
Product C Description, Different Product C Description

설명

GROUP BY product_code를 통해 같은 product_code를 가진 레코드들을 그룹화했습니다.
GROUP_CONCAT(DISTINCT text ORDER BY registration_date ASC)는 각 그룹에서 중복을 제거하고, 등록일 순으로 정렬된 문자열을 연결해 표시합니다.
HAVING COUNT(DISTINCT text) > 1 조건은 텍스트가 한 개 이상 다른 경우만 출력하게 합니다.

마치며

실무에서 충분히 발생할 수 있는 케이스입니다. (변경내역 검증, 그룹내 다른값 추출 등)
이 글에서는 최대한 쉬운예시를 들어 설명했지만, 좀더 복잡한 구조에서도 충분히 활용 가능한 쿼리문입니다.
예시 : 2개이상 테이블 구조, 기준이 되는 그룹이 여러개인경우 등