이미지 경로와 추천 수(Upvote)를 함께 관리하는 테이블을 예로 들어 보겠습니다. 이때 첫 번째 컬럼은 아래와 같이 자동 증가(AUTO_INCREMENT)되는 Id로 설정합니다.
1. 테이블 생성하기
먼저 이미지 경로(ImagePath)와 추천 수(UpvoteValue)를 저장할 테이블을 생성합니다.
mysql> create table DemoTable(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ImagePath varchar(100),
UpvoteValue int
);
Query OK, 0 rows affected (0.72 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(ImagePath,UpvoteValue) values('Image1.jpeg',90);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(ImagePath,UpvoteValue) values('Image2.jpeg',10);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(ImagePath,UpvoteValue) values('Image3.jpeg',120);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable(ImagePath,UpvoteValue) values('Image4.jpeg',114);
Query OK, 1 row affected (1.17 sec)3. 전체 레코드 조회하기
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+-------------+-------------+
| Id | ImagePath | UpvoteValue |
+----+-------------+-------------+
| 1 | Image1.jpeg | 90 |
| 2 | Image2.jpeg | 10 |
| 3 | Image3.jpeg | 120 |
| 4 | Image4.jpeg | 114 |
+----+-------------+-------------+
4 rows in set (0.00 sec)
4. 최대 추천 값에 해당하는 이미지 경로 검색하기
서브쿼리에서 MAX() 함수로 테이블 전체의 최대 추천 값을 구한 뒤, 이를 IN 연산자와 함께 사용하면 해당 값을 가진 레코드의 ImagePath를 손쉽게 조회할 수 있습니다.
mysql> select ImagePath from DemoTable where UpvoteValue IN (select max(UpvoteValue) from DemoTable);
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-------------+
| ImagePath |
+-------------+
| Image3.jpeg |
+-------------+
1 row in set (0.00 sec)
참고: 다른 방법 — ORDER BY와 LIMIT 활용
MAX() 함수 대신 정렬과 LIMIT 절을 조합해도 동일한 결과를 얻을 수 있습니다. 추천 수를 내림차순 정렬한 후 상위 1개만 가져오는 방식입니다.
mysql> select ImagePath from DemoTable order by UpvoteValue desc limit 1;
두 방식 모두 최대 추천 값을 가진 레코드를 반환하지만, 동률인 레코드까지 모두 조회하려면 MAX()와 IN을 사용하는 서브쿼리 방식이 더 적합합니다. 반면 단 하나의 결과만 필요하다면 ORDER BY ... LIMIT 1 방식이 더 간결하고 성능 면에서 유리할 수 있습니다.