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

MySQL에서 총 지속 시간(시간 합계) 계산하는 방법 – SEC_TO_TIME() 활용하기

MySQL에서 여러 시간 값의 총 지속 시간을 계산하려면 SEC_TO_TIME() 함수를 사용해야 합니다. 이 함수는 초 단위의 값을 다시 'HH:MM:SS' 형식의 시간으로 변환해 주기 때문에, TIME 타입 컬럼의 합계를 구할 때 매우 유용합니다.

1. 예제 테이블 생성하기

먼저 로그인 시간을 저장할 테이블을 생성해 보겠습니다.

mysql> CREATE TABLE AddTotalTimeDemo
-> (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> LoginTime TIME
-> );
Query OK, 0 rows affected (0.63 sec)

2. 데이터 삽입하기

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

mysql> INSERT INTO AddTotalTimeDemo(LoginTime) VALUES('05:05:00');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO AddTotalTimeDemo(LoginTime) VALUES('07:20:00');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO AddTotalTimeDemo(LoginTime) VALUES('02:05:00');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO AddTotalTimeDemo(LoginTime) VALUES('03:03:00');
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO AddTotalTimeDemo(LoginTime) VALUES('05:07:00');
Query OK, 1 row affected (0.11 sec)

3. 전체 레코드 조회하기

SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 확인합니다.

mysql> SELECT * FROM AddTotalTimeDemo;

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

+----+-----------+
| Id | LoginTime |
+----+-----------+
| 1 | 05:05:00 |
| 2 | 07:20:00 |
| 3 | 02:05:00 |
| 4 | 03:03:00 |
| 5 | 05:07:00 |
+----+-----------+
5 rows in set (0.00 sec)

4. 총 지속 시간 계산하기

총 시간을 계산하는 핵심 쿼리는 다음과 같습니다.

mysql> SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(LoginTime))) AS TotalTime 
FROM AddTotalTimeDemo;

실행 결과는 아래와 같습니다.

+-----------+
| TotalTime |
+-----------+
| 22:40:00 |
+-----------+
1 row in set (0.00 sec)

쿼리 동작 원리

이 쿼리가 작동하는 방식은 다음과 같습니다.

TIME_TO_SEC() 함수가 각 시간 값을 초 단위로 변환하고, SUM()이 변환된 초 값을 모두 더한 뒤, SEC_TO_TIME()이 최종 합계를 다시 시간 형식으로 변환합니다. 위 예제에서는 5개의 로그인 시간을 모두 더한 결과인 22시간 40분이 출력되었습니다.

이 방식은 단순히 TIME 값을 직접 더하는 것보다 안정적입니다. MySQL에서 TIME 값을 SUM으로 직접 더할 경우 범위나 형식 관련 오류가 발생할 수 있지만, 초 단위로 변환 후 계산하면 정확한 결과를 얻을 수 있습니다.