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

MySQL에서 행 값 합산 후 결과 정렬하기 – GROUP BY와 ORDER BY 활용법

행 값을 합산한 뒤 결과를 정렬하려면 GROUP BY 절과 ORDER BY 절을 함께 사용하면 됩니다. GROUP BY로 데이터를 그룹화하여 합계를 구하고, ORDER BY로 원하는 정렬 순서를 지정할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable1499
    -> (
    -> StudentName varchar(20),
    -> StudentMarks int
    -> );
Query OK, 0 rows affected (0.46 sec)

2. 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다. 학생마다 점수 레코드가 두 개씩 들어가도록 구성했습니다.

mysql> insert into DemoTable1499 values('Chris',56);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1499 values('David',78);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1499 values('Bob',98);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1499 values('Chris',45);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1499 values('David',98);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1499 values('Bob',58);
Query OK, 1 row affected (0.11 sec)

3. 전체 레코드 조회하기

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

mysql> select * from DemoTable1499;

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

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris        |          56 |
| David        |          78 |
| Bob          |          98 |
| Chris        |          45 |
| David        |          98 |
| Bob          |          58 |
+-------------+--------------+
6 rows in set (0.00 sec)

위 결과에서 볼 수 있듯이 각 학생별로 여러 개의 점수 레코드가 존재합니다.

4. 행 값 합산 후 내림차순 정렬하는 쿼리

다음은 학생별로 점수를 합산한 뒤, 합계를 기준으로 내림차순 정렬하는 쿼리입니다.

mysql> select StudentName,sum(StudentMarks) as TotalSum from DemoTable1499
    -> group by StudentName
    -> order by TotalSum desc;

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

+-------------+----------+
| StudentName | TotalSum |
+-------------+----------+
| David        |      176 |
| Bob          |      156 |
| Chris        |      101 |
+-------------+----------+
3 rows in set (0.00 sec)

쿼리 동작 방식

  • SUM(StudentMarks) : 학생별 점수를 모두 더한 총합을 계산합니다.
  • AS TotalSum : 집계 결과 열에 'TotalSum'이라는 별칭을 부여해 가독성을 높입니다.
  • GROUP BY StudentName : 같은 학생끼리 하나의 그룹으로 묶어 집계합니다.
  • ORDER BY TotalSum DESC : 합계 값을 기준으로 내림차순(큰 값부터) 정렬합니다.

결과적으로 David는 176점, Bob은 156점, Chris는 101점으로 총점이 높은 순서대로 출력되었습니다. 반대로 오름차순 정렬이 필요하다면 DESC 대신 ASC를 사용하면 됩니다.