행 값을 합산한 뒤 결과를 정렬하려면 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를 사용하면 됩니다.