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

MySQL SUM() 함수에 문자형 열을 인수로 전달하면 어떻게 될까?

MySQL의 SUM() 함수는 기본적으로 숫자 데이터를 집계하기 위한 함수입니다. 그렇다면 문자(character) 타입의 열을 인수로 전달하면 어떤 결과가 나올까요?

MySQL은 이 경우 NULL이 아닌 0을 반환하며, 동시에 경고(warning) 메시지를 함께 출력합니다. 즉, 에러로 처리되지 않고 쿼리 자체는 정상적으로 실행됩니다.

예제로 확인하기

'Social'이라는 테이블에 문자형 열(Name)이 포함된 다음 데이터가 있다고 가정해 보겠습니다.

테이블 조회

mysql> Select * from Social;

+------+-------+
| Id   | Name  |
+------+-------+
| 100  | Rahul |
+------+-------+

1 row in set (0.00 sec)

문자형 열에 SUM() 적용

mysql> Select SUM(Name) From Social;

+-----------+
| SUM(Name) |
+-----------+
| 0         |
+-----------+

1 row in set, 1 warning (0.00 sec)

결과에서 볼 수 있듯이, 숫자가 아닌 값이 포함된 열에 SUM()을 적용하면 합계 대신 0이 반환되며, '1 warning'이라는 문구가 함께 표시됩니다.

경고 내용 확인하기

발생한 경고의 상세 내용은 SHOW WARNINGS; 명령으로 확인할 수 있습니다.

mysql> SHOW WARNINGS;

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'Rahul' |
+---------+------+----------------------------------------+

MySQL은 내부적으로 문자열을 숫자(DOUBLE)로 변환하려고 시도하다가 실패하고, 잘못된 값이 잘렸다는 경고(코드 1292)를 발생시킵니다.

정리

SUM() 함수에 문자형 열을 인수로 전달하면:

  • 쿼리는 에러 없이 실행되지만, 결과값으로 0이 반환됩니다.
  • NULL이 반환되는 것이 아니라는 점에 유의해야 합니다.
  • 경고 메시지가 함께 발생하므로, 실무에서는 반드시 숫자형 열에만 집계 함수를 사용하는 것이 좋습니다.