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)
쿼리 동작 원리 살펴보기
위 쿼리가 어떻게 동작하는지 단계별로 이해해 보겠습니다.
- 서브쿼리: 내부 쿼리에서 value1 * value2를 계산하여 각 행별 곱셈 결과를 total_value라는 별칭으로 생성합니다. 예를 들어 20 × 800 = 16000, 10 × 300 = 3000처럼 계산됩니다.
- GROUP BY: 계산된 total_value 기준으로 결과를 그룹화하여 동일한 값들이 하나의 그룹으로 묶입니다.
- COUNT(*): 각 그룹에 포함된 행의 개수, 즉 해당 값이 몇 번 나타났는지를 세어 number_of_occurrences로 반환합니다.
- ORDER BY ... DESC: total_value를 내림차순으로 정렬하여 가장 큰 값이 맨 앞에 오도록 합니다.
- LIMIT 1: 정렬된 결과 중 첫 번째 행만 가져오므로, 결국 최대 누적 값만 출력됩니다.
결과적으로 위 예제에서는 20 × 800 = 16000이 최대 누적 값이며, 이 값은 테이블에 1번 등장했음을 확인할 수 있습니다. 만약 동일한 곱셈 결과를 가진 행이 여러 개 있다면 number_of_occurrences 값이 그만큼 증가하게 됩니다.
마무리
서브쿼리와 COUNT(*), GROUP BY, ORDER BY, LIMIT을 조합하면 MySQL에서 곱셈 기반의 누적 값 최댓값과 출현 횟수를 간단하고 효율적으로 조회할 수 있습니다. 이 패턴은 매출 합계, 점수 계산 등 다양한 실무 시나리오에서 응용할 수 있으니 꼭 기억해 두시기 바랍니다.