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

MySQL에서 최대 누적 값(곱셈 결과)을 구하는 쿼리 작성법

MySQL에서 두 컬럼의 곱으로 계산되는 누적 값 중 가장 큰 값과 그 값이 나타난 횟수를 함께 조회하려면, 집계 함수인 COUNT(*)와 서브쿼리(subquery)를 함께 사용하면 됩니다. 여기에 GROUP BY를 조합하여 동일한 계산 결과를 하나의 그룹으로 묶고, ORDER BY와 LIMIT을 활용해 최댓값만 손쉽게 추출할 수 있습니다.

예제 테이블 생성하기

먼저 실습에 사용할 테이블을 생성해 보겠습니다.

mysql> create table demo23
-> (
-> id int not null auto_increment primary key,
-> value1 int,
-> value2 int
-> );
Query OK, 0 rows affected (1.65 sec)

테이블 생성 쿼리 설명

  • id: 자동 증가(auto_increment)되는 기본 키(primary key)
  • value1: 첫 번째 정수 값
  • value2: 두 번째 정수 값

샘플 데이터 삽입하기

INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.

mysql> insert into demo23(value1,value2) values(5,600);
Query OK, 1 row affected (0.20 sec)

mysql> insert into demo23(value1,value2) values(20,800);
Query OK, 1 row affected (0.06 sec)

mysql> insert into demo23(value1,value2) values(7,400);
Query OK, 1 row affected (0.20 sec)

mysql> insert into demo23(value1,value2) values(6,500);
Query OK, 1 row affected (0.17 sec)

mysql> insert into demo23(value1,value2) values(10,300);
Query OK, 1 row affected (0.12 sec)

mysql> insert into demo23(value1,value2) values(11,500);
Query OK, 1 row affected (0.14 sec)

저장된 데이터 확인하기

SELECT 문으로 테이블에 저장된 전체 레코드를 조회합니다.

mysql> select * from demo23;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+----+--------+--------+
| id | value1 | value2 |
+----+--------+--------+
| 1  | 5      | 600    |
| 2  | 20     | 800    |
| 3  | 7      | 400    |
| 4  | 6      | 500    |
| 5  | 10     | 300    |
| 6  | 11     | 500    |
+----+--------+--------+
6 rows in set (0.00 sec)

최대 누적 값을 구하는 쿼리

이제 value1과 value2를 곱한 누적 값(total_value) 중 최댓값과 해당 값이 등장한 횟수를 조회하는 쿼리입니다.

mysql> select total_value, count(*) as number_of_occurrences
-> from (
-> select value1*value2 as total_value
-> from demo23
-> ) t
-> group by total_value
-> order by total_value desc
-> limit 1;

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

+-------------+-----------------------+
| total_value | number_of_occurrences |
+-------------+-----------------------+
| 16000       |                     1 |
+-------------+-----------------------+
1 row in set (0.00 sec)

쿼리 동작 원리 살펴보기

위 쿼리가 어떻게 동작하는지 단계별로 이해해 보겠습니다.

  1. 서브쿼리: 내부 쿼리에서 value1 * value2를 계산하여 각 행별 곱셈 결과를 total_value라는 별칭으로 생성합니다. 예를 들어 20 × 800 = 16000, 10 × 300 = 3000처럼 계산됩니다.
  2. GROUP BY: 계산된 total_value 기준으로 결과를 그룹화하여 동일한 값들이 하나의 그룹으로 묶입니다.
  3. COUNT(*): 각 그룹에 포함된 행의 개수, 즉 해당 값이 몇 번 나타났는지를 세어 number_of_occurrences로 반환합니다.
  4. ORDER BY ... DESC: total_value를 내림차순으로 정렬하여 가장 큰 값이 맨 앞에 오도록 합니다.
  5. LIMIT 1: 정렬된 결과 중 첫 번째 행만 가져오므로, 결국 최대 누적 값만 출력됩니다.

결과적으로 위 예제에서는 20 × 800 = 16000이 최대 누적 값이며, 이 값은 테이블에 1번 등장했음을 확인할 수 있습니다. 만약 동일한 곱셈 결과를 가진 행이 여러 개 있다면 number_of_occurrences 값이 그만큼 증가하게 됩니다.

마무리

서브쿼리와 COUNT(*), GROUP BY, ORDER BY, LIMIT을 조합하면 MySQL에서 곱셈 기반의 누적 값 최댓값과 출현 횟수를 간단하고 효율적으로 조회할 수 있습니다. 이 패턴은 매출 합계, 점수 계산 등 다양한 실무 시나리오에서 응용할 수 있으니 꼭 기억해 두시기 바랍니다.