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

MySQL에서 중복 ID별 부동 소수점 열의 최솟값 구하는 방법

MySQL에서는 동일한 ID가 여러 번 중복되어 저장된 데이터에서 각 ID에 해당하는 열의 최솟값을 구해야 하는 경우가 자주 발생합니다. 이럴 때 GROUP BY 절과 MIN() 집계 함수를 함께 사용하면 손쉽게 해결할 수 있습니다.

기본 문법

중복된 ID가 있는 열에서 해당 그룹별 최솟값을 가져오려면 아래와 같이 GROUP BY와 MIN()을 조합하여 쿼리를 작성합니다.

select min(yourColumnName) from yourTableName group by yourColumnName;

예제 테이블 생성하기

먼저 위 문법을 실습하기 위해 테스트용 테이블을 생성해 보겠습니다. Id와 Price 두 개의 컬럼으로 구성된 테이블입니다.

mysql> create table DemoTable2005
(
    Id int,
    Price float
);
Query OK, 0 rows affected (0.71 sec)

데이터 삽입하기

insert 명령문을 사용하여 테이블에 레코드를 추가합니다. 이 예제에서는 의도적으로 동일한 Id(1)를 가진 두 개의 레코드를 삽입합니다.

mysql> insert into DemoTable2005 values(1,56.88);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable2005 values(1,120.56);
Query OK, 1 row affected (0.23 sec)

저장된 데이터 확인하기

select 문을 사용하여 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable2005;

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

+------+--------+
| Id   | Price  |
+------+--------+
|    1 |  56.88 |
|    1 | 120.56 |
+------+--------+
2 rows in set (0.00 sec)

중복 ID 기준 최솟값 조회하기

이제 중복된 Id 컬럼을 기준으로 Price 컬럼의 최솟값을 구하는 쿼리를 실행해 보겠습니다.

mysql> select min(Price) from DemoTable2005 group by Id;

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

+------------+
| min(Price) |
+------------+
|      56.88 |
+------------+
1 row in set (0.00 sec)

결과 분석

쿼리 결과를 보면 GROUP BY Id 절이 동일한 Id 값을 가진 레코드들을 하나의 그룹으로 묶고, MIN(Price) 함수가 각 그룹 내에서 가장 작은 가격인 56.88을 반환한 것을 확인할 수 있습니다. 만약 여러 개의 서로 다른 Id가 있다면 각 Id별로 최솟값이 별도의 행으로 출력됩니다.

이처럼 GROUP BY와 MIN() 함수를 활용하면 중복 데이터가 포함된 테이블에서도 원하는 그룹 단위의 최솟값을 간단하고 효율적으로 조회할 수 있습니다.