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
'SQL' 카테고리의 다른 글
| mysql 이스케이프 ESCAPE 특정문자 제외하기 \ , _ 간단하게 설명 (2) | 2025.07.14 |
|---|