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

MySQL 단일 쿼리로 행 개수 세기 및 정렬하기

개요

MySQL에서는 GROUP BY 절과 COUNT() 함수, 그리고 ORDER BY 절을 하나의 쿼리에 조합하면 각 값별로 행의 개수를 집계하고, 그 결과를 개수 기준으로 내림차순 정렬할 수 있습니다. 이번 글에서는 예제 테이블을 만들고 데이터를 삽입한 뒤, 단일 쿼리로 행 개수를 계산하고 정렬하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제로 사용할 테이블을 생성합니다.

mysql> create table DemoTable783 (
   FirstName varchar(100)
);
Query OK, 0 rows affected (0.65 sec)

2. 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다. 의도적으로 동일한 이름을 반복해서 삽입하여, 이후 집계 결과가 어떻게 나오는지 확인할 수 있도록 했습니다.

mysql> insert into DemoTable783 values('Adam');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable783 values('Chris');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable783 values('Chris');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable783 values('Adam');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable783 values('Adam');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable783 values('Robert');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable783 values('Robert');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable783 values('Adam');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable783 values('Chris');
Query OK, 1 row affected (0.14 sec)

3. 전체 레코드 확인하기

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

mysql> select *from DemoTable783;

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

+-----------+
| FirstName |
+-----------+
| Adam |
| Chris |
| Chris |
| Adam |
| Adam |
| Robert |
| Robert |
| Adam |
| Chris |
+-----------+
9 rows in set (0.00 sec)

총 9개의 행이 저장되어 있으며, Adam은 4번, Chris는 3번, Robert는 2번 등장했습니다.

4. 행 개수 집계 및 정렬 쿼리

다음은 MySQL에서 행의 개수를 세고 정렬하는 핵심 쿼리입니다. GROUP BY로 이름별로 묶고, COUNT(*)로 각 그룹의 행 수를 계산한 후, ORDER BY count(*) DESC를 사용해 개수가 많은 순서대로 내림차순 정렬합니다.

mysql> select FirstName, count(*) from DemoTable783 group by FirstName order by count(*) desc;

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

+-----------+----------+
| FirstName | count(*) |
+-----------+----------+
| Adam | 4 |
| Chris | 3 |
| Robert | 2 |
+-----------+----------+
3 rows in set (0.00 sec)

핵심 포인트 정리

  • GROUP BY FirstName: 동일한 이름을 가진 행들을 하나의 그룹으로 묶습니다.
  • COUNT(*): 각 그룹에 속한 행의 개수를 반환합니다.
  • ORDER BY count(*) DESC: 개수가 많은 순서부터 내림차순으로 정렬합니다. 오름차순이 필요하면 ASC(또는 생략)로 변경하면 됩니다.

이처럼 GROUP BY, COUNT(), ORDER BY 세 가지를 조합하면 별도의 서브쿼리나 추가 처리 없이 단일 쿼리만으로 집계와 정렬을 한 번에 처리할 수 있습니다. 게시판에서 인기 태그를 집계하거나, 로그 데이터에서 최다 발생 이벤트를 찾는 등 다양한 상황에서 유용하게 활용할 수 있습니다.