CodeGym /행동 /SQL SELF /SQL에서 숫자 함수: 반올림, 나머지, 제곱, 제곱근

SQL에서 숫자 함수: 반올림, 나머지, 제곱, 제곱근

SQL SELF
레벨 8 , 레슨 3
사용 가능

SQL은 그냥 텍스트랑 테이블만 다루는 게 아니야. 실제 데이터베이스에서는 가격, 수량, 점수, 퍼센트, 좌표 같은 숫자를 자주 다뤄야 해. 예를 들어서:

  • 할인 계산할 때 금액을 정수로 반올림하고 싶을 때.
  • 짝수/홀수 학생 데이터를 뽑고 싶을 때.
  • 점수 분석하면서 분산의 제곱근이 궁금할 때.
  • 아니면 점수 계산 공식 만들 때 제곱 연산이 필요할 때.

SQL만으로도 외부 프로그래밍 언어 도움 없이 이런 거 다 할 수 있어. 쿼리 안에서 내장 수학 함수로 바로 처리 가능! 오늘은 그중에서 제일 많이 쓰는 여섯 가지를 볼 거야:

  • ROUND() — 반올림
  • CEIL() — 올림
  • FLOOR() — 내림
  • MOD() — 나머지
  • POWER() — 제곱
  • SQRT() — 제곱근

* 숫자 반올림: ROUND(), CEIL(), FLOOR()*

소수점 있는 숫자(예: 4.67891)를 다룰 때 결과를 반올림해야 할 때가 많아. 예를 들어 평균 점수, 주문 총액, 할인 퍼센트 등등 계산할 때 소수점이 너무 길면 보기 안 좋고 헷갈릴 수도 있지.

ROUND() — 수학적으로 반올림

ROUND(number [, digits])
  • number — 반올림할 숫자.
  • digits (옵션) — 소수점 아래 몇 자리까지 남길지.

예시:

SELECT ROUND(4.67);       -- 5
SELECT ROUND(4.6789, 2);  -- 4.68

ROUND()는 우리가 아는 수학 반올림이랑 똑같이 동작해: 4.5 → 5, 4.49 → 4.

돈이나 점수처럼 예쁘게 보여줘야 할 때 완전 유용해: 4.333334.33.

CEIL()올림해서 가장 가까운 정수로

SELECT CEIL(4.1);  -- 5
  • 이미 정수면 결과는 그대로야.
  • 항상 원래 숫자보다 크거나 같은 정수를 반환해.

예를 들어 상품 21개를 10개씩 페이지에 보여주고 싶으면 몇 페이지가 필요한지 계산할 때 좋아: 21 / 10 → 3페이지 필요.

FLOOR()내림

SELECT FLOOR(4.9);  -- 4
  • 원래 숫자보다 작거나 같은 정수를 반환해.

값이 어느 "층"이나 "단계"에 있는지 구할 때 자주 써.

비교:

ROUND() CEIL() FLOOR()
4.4 4 5 4
4.6 5 5 4
-4.6 -5 -4 -5

* 나머지: MOD()*

나머지가 왜 필요할까? 예를 들면:

  • 숫자가 짝수인지 확인할 때.
  • 행을 패턴대로 그룹으로 나눌 때 (예: 3개 팀으로 분배).
  • 반복되는 루프 만들 때 (예: "다섯 번째마다").

문법:

MOD(dividend, divisor)

예시:

SELECT MOD(17, 5);  -- 2  (3*5 +2)
SELECT MOD(10, 3);  -- 1  (3*3 +1)

참고: 나머지의 부호는 첫 번째 인자(dividend)의 부호를 따라가.

활용 예시:

SELECT student_id,
       CASE WHEN MOD(student_id, 2) = 0 THEN '짝수' ELSE '홀수' END AS parity
FROM students;

* 제곱: POWER()*

가끔은 그냥 곱셈이 아니라 수학 공식을 써야 할 때가 있어:

  • 이자 계산: base * POWER(1 + rate, years)
  • 원 넓이: π * r^2
  • 머신러닝에서 공식 가중치 계산

문법:

POWER(base, exponent)

예시:

SELECT POWER(2, 3);   -- 8
SELECT POWER(5, 2);   -- 25
SELECT POWER(9, 0.5); -- 3 (제곱근)

정수, 소수, 음수 다 쓸 수 있어.

제곱근: SQRT()

특히 통계에서 (예: 표준편차) 제곱근이 필요할 때 SQRT()가 딱이야.

SELECT SQRT(25);    -- 5
SELECT SQRT(2);     -- ~1.4142

음수를 넣으면 에러가 나. 그럴 가능성이 있으면 ABS()를 같이 써:

SELECT SQRT(ABS(-25));  -- 5

실전 시나리오

시나리오 1: 주문 총액 반올림

SELECT order_id, ROUND(total_price, 0) AS total_rounded
FROM orders;

시나리오 2: 페이지 수 계산

SELECT CEIL(COUNT(*) / 10.0) AS pages_needed
FROM products;

시나리오 3: 학생을 3개 그룹으로 나누기

SELECT student_id,
       MOD(student_id, 3) AS group_number
FROM students;

시나리오 4: 평균 제곱근 구하기

SELECT SQRT(AVG(POWER(score, 2))) AS root_mean_square
FROM grades;

자주 하는 실수 & 팁

ROUND()는 두 번째 인자도 받을 수 있으니까 소수 둘째 자리까지 반올림하려면 꼭 써줘.

MOD()는 음수랑 같이 쓰면 예상 못한 결과가 나올 수 있어.

POWER()SQRT()는 소수 인자도 잘 받아. 필요하면 CAST()로 타입 변환해.

SQRT()에 음수가 들어가면 실행 에러 나니까 꼭 체크해!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION