MySQL에서는 SUBSTRING() 함수와 GROUP BY 절을 조합하면 특정 문자로 시작하는 레코드의 개수를 손쉽게 집계할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성
먼저 이름 데이터를 저장할 테이블을 생성합니다.
mysql> create table DemoTable775 ( FirstName varchar(100) ); Query OK, 0 rows affected (0.78 sec)
2. 샘플 데이터 삽입
INSERT 문을 사용하여 테이블에 여러 개의 레코드를 추가합니다.
mysql> insert into DemoTable775 values('Adam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable775 values('Carol');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable775 values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable775 values('Sam');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable775 values('Adan');
Query OK, 1 row affected (0.15 sec)3. 전체 레코드 확인
SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.
mysql> select *from DemoTable775;
실행 결과는 다음과 같습니다.
+-----------+ | FirstName | +-----------+ | Adam | | Carol | | John | | Sam | | Adan | +-----------+ 5 rows in set (0.00 sec)
4. 특정 문자로 시작하는 레코드 개수 집계
이제 특정 문자(접두사)로 시작하는 레코드의 개수를 구하는 핵심 쿼리입니다. SUBSTRING(FirstName,1,2)는 각 이름의 첫 두 글자를 추출하며, 이 값을 기준으로 GROUP BY 하여 그룹별 레코드 수를 COUNT(*)로 계산합니다.
mysql> select count(*),substring(FirstName,1,2) from DemoTable775 group by substring(FirstName,1,2);
실행 결과는 다음과 같습니다.
+----------+--------------------------+ | count(*) | substring(FirstName,1,2) | +----------+--------------------------+ | 2 | Ad | | 1 | Ca | | 1 | Jo | | 1 | Sa | +----------+--------------------------+ 4 rows in set (0.00 sec)
결과 해석
출력 결과를 보면 'Ad'로 시작하는 이름(Adam, Adan)은 2개, 'Ca'(Carol), 'Jo'(John), 'Sa'(Sam)로 시작하는 이름은 각각 1개씩 있는 것을 확인할 수 있습니다.
참고로, 특정 접두사 하나만 카운트하고 싶다면 WHERE 절과 LIKE 연산자를 사용하는 방법도 있습니다. 예를 들어 'Ad'로 시작하는 레코드만 세려면 다음과 같이 작성할 수 있습니다.
mysql> select count(*) from DemoTable775 where FirstName like 'Ad%';
이처럼 SUBSTRING + GROUP BY 조합은 전체 데이터를 접두사별 분포로 한눈에 파악할 때 유용하고, LIKE 조건은 특정 패턴의 건수만 필요할 때 효율적입니다.