본문 바로가기

SQL

mysql 비율 구할 때 주의점 정수 나눗셈

728x90
select round((select COUNT(*) * 1.0 from artworks where credit like "%gift%") / count(*) ,3)
 as ratio
from artworks

 

방금 코테 문제 풀다가 생긴 문제였다.

 

문제 자체는 컬럼에 gift 가 들어간 컬럼의 전체 비율을 구하는 문제라 쉬웠다.

하지만 결과는 "0" 이 나옴

 

⚠️ 원인: SQL의 정수 나눗셈 (Integer Division)

SQL에서 COUNT(*)는 **정수(INTEGER)**를 반환합니다. 이때 정수끼리 나누면 결과도 정수가 됩니다.

예를 들어:

  • 5 / 100 → 0 (정수 나눗셈)
  • 20 / 100 → 0
  • 120 / 1000 → 0

소수점이 날아가 버림

 

✅ 해결법: 실수형(소수)으로 강제 변환하기

정수 나눗셈을 방지하려면 둘 중 하나를 **실수(FLOAT)**로 바꿔줘야 합니다.

SELECT 
  (SELECT COUNT(*) * 1.0 FROM artworks WHERE credit LIKE '%gift%') / COUNT(*) AS ratio
FROM artworks;

 

방법 2: CAST() 함수 사용

SELECT 
  CAST((SELECT COUNT(*) FROM artworks WHERE credit LIKE '%gift%') AS FLOAT) / COUNT(*) AS ratio
FROM artworks;

 

 

🧠 마무리 정리

  • SQL에서 정수끼리 나누면 소수점은 버려진다!
  • 비율 계산을 할 땐 *** 1.0 또는 CAST(... AS FLOAT)**로 실수 연산을 만들어줘야 한다.
  • 최종적으로 **ROUND(..., 자릿수)**를 이용하면 깔끔한 퍼센트 표현도 가능하다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90