Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 고유 열 값별 개수를 계산하는 방법 – GROUP BY 활용 가이드

MySQL에서 특정 열에 저장된 값들을 고유한 기준으로 묶어 각각의 개수를 계산하려면 GROUP BY 절을 사용해야 합니다. 이 글에서는 예제 테이블을 만들고 데이터를 삽입한 뒤, GROUP BY와 COUNT() 함수를 조합하여 각 이름이 몇 번 등장하는지 확인하는 과정을 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 학생 이름을 저장할 테이블을 생성합니다.

mysql> create table DemoTable
    (
    StudentFirstName varchar(20)
    );
Query OK, 0 rows affected (0.74 sec)

2단계: 데이터 삽입

INSERT 명령을 사용해 여러 개의 레코드를 삽입합니다. 의도적으로 중복되는 이름(John, Bob, Carol)을 포함시켰습니다.

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (1.34 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.55 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.37 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.14 sec)

3단계: 전체 데이터 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable;

실행 결과는 다음과 같습니다.

+------------------+
| StudentFirstName |
+------------------+
| John             |
| Carol            |
| John             |
| John             |
| Bob              |
| David            |
| Bob              |
| Carol            |
| Robert           |
+------------------+
9 rows in set (0.00 sec)

4단계: GROUP BY로 고유 값 개수 계산

다음은 MySQL에서 GROUP BY 절을 사용해 각 고유한 이름별로 레코드 수를 집계하는 쿼리입니다.

mysql> select StudentFirstName,count(*) from DemoTable
group by StudentFirstName;

실행 결과는 다음과 같습니다.

+------------------+----------+
| StudentFirstName | count(*) |
+------------------+----------+
| John             | 3        |
| Carol            | 2        |
| Bob              | 2        |
| David            | 1        |
| Robert           | 1        |
+------------------+----------+
5 rows in set (0.00 sec)

결과 해석

위 결과를 보면 총 9개의 레코드가 5개의 고유한 이름 그룹으로 나뉘었습니다. John은 3번, Carol과 Bob은 각각 2번, David와 Robert는 1번씩 등장했습니다. 이처럼 GROUP BY는 지정한 열의 값이 같은 행들을 하나의 그룹으로 묶고, COUNT() 함수가 각 그룹의 행 개수를 반환합니다.

추가 팁

  • 정렬 추가: 쿼리 끝에 ORDER BY count(*) DESC를 붙이면 개수가 많은 순서대로 결과를 정렬할 수 있습니다.
  • NULL 처리: COUNT(*)는 NULL을 포함한 모든 행을 세지만, COUNT(StudentFirstName)처럼 열을 직접 지정하면 NULL 값은 제외하고 계산됩니다.
  • 고유 값 목록만 필요한 경우: 개수 없이 중복 없는 값만 확인하고 싶다면 SELECT DISTINCT StudentFirstName FROM DemoTable;을 사용하면 됩니다.