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

MySQL에서 두 숫자의 절대 차이 구하는 방법 – ABS() 함수 활용 가이드

MySQL에서 두 숫자의 절대 차이 구하는 방법

MySQL에서 두 숫자 사이의 절대 차이를 구할 때는 ABS() 함수를 사용합니다. ABS() 함수는 인자로 받은 값의 절댓값을 반환하기 때문에, 두 숫자를 단순히 뺐을 때 결과가 음수가 나오더라도 항상 양수 형태의 차이를 얻을 수 있습니다.

실제 동작을 확인하기 위해 먼저 데모용 테이블을 생성해 보겠습니다.

mysql> create table findDifferenceDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> FirstNumber float,
-> SecondNumber float
-> );
Query OK, 0 rows affected (0.60 sec)

테이블 생성이 완료되면 INSERT 명령으로 몇 개의 샘플 데이터를 추가합니다.

mysql> insert into findDifferenceDemo(FirstNumber,SecondNumber) values(4.2,2.3);
Query OK, 1 row affected (0.20 sec)
mysql> insert into findDifferenceDemo(FirstNumber,SecondNumber) values(23.4,5.6);
Query OK, 1 row affected (0.14 sec)
mysql> insert into findDifferenceDemo(FirstNumber,SecondNumber) values(5.8,34.56);
Query OK, 1 row affected (0.16 sec)
mysql> insert into findDifferenceDemo(FirstNumber,SecondNumber) values(7.8,7.2);
Query OK, 1 row affected (0.16 sec)
mysql> insert into findDifferenceDemo(FirstNumber,SecondNumber) values(12.8,10.2);
Query OK, 1 row affected (0.13 sec)

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from findDifferenceDemo;

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

+----+-------------+--------------+
| Id | FirstNumber | SecondNumber |
+----+-------------+--------------+
| 1 | 4.2 | 2.3 |
| 2 | 23.4 | 5.6 |
| 3 | 5.8 | 34.56 |
| 4 | 7.8 | 7.2 |
| 5 | 12.8 | 10.2 |
+----+-------------+--------------+
5 rows in set (0.00 sec)

절대 차이를 구하는 쿼리

이제 ABS() 함수를 활용해 FirstNumber와 SecondNumber 두 컬럼 값의 절대 차이를 계산하고, 그 결과를 내림차순으로 정렬하는 쿼리를 작성해 보겠습니다.

mysql> SELECT ABS(FirstNumber - secondNumber) AS diff
-> from findDifferenceDemo
-> order by diff desc;

위 쿼리의 실행 결과는 다음과 같습니다.

+--------------------+
| diff |
+--------------------+
| 28.760001182556152 |
| 17.799999713897705 |
| 2.6000003814697266 |
| 1.8999998569488525 |
| 0.6000003814697266 |
+--------------------+
5 rows in set (0.00 sec)

FLOAT 타입 사용 시 주의할 점

결과를 자세히 보면 28.76처럼 깔끔한 값이 아니라 28.760001182556152처럼 긴 소수가 출력되는 것을 확인할 수 있습니다. 이는 해당 컬럼이 FLOAT 타입으로 선언되어 있어 발생하는 부동소수점 오차 때문입니다.

정확한 소수 연산이 필요하다면 컬럼 타입을 DECIMAL로 변경하거나, ROUND() 함수를 함께 사용해 원하는 자릿수까지 반올림하여 출력하는 것이 좋습니다.

mysql> SELECT ROUND(ABS(FirstNumber - SecondNumber), 2) AS diff
-> from findDifferenceDemo
-> order by diff desc;