수학 함수·연산자

수학 함수·연산자

집계·반올림·삼각함수가 필요할 때, 대부분 그냥 SQL 안에서 해결돼요. PostgreSQL은 여러 타입에 걸쳐 쓸 수 있는 수학 연산자와 함수를 풍부하게 제공하니까요. "이 타입에는 이 연산자가 동작하는지", "결과는 어떤 타입인지"만 익숙하면 바로 활용할 수 있어요. 이 페이지에서 수학 연산자와 함수들의 핵심을 정리해 볼게요.

출처: PostgreSQL 공식 문서 — Mathematical Functions and Operators

수학 연산자

수학 연산자는 많은 PostgreSQL 타입에 제공돼요. 표준 수학 관례가 없는 타입(예: date/time 타입)의 실제 동작은 별도 절에서 다뤄요.

연산자 설명에서 numeric_type을 받는 것으로 표시된 것들은 smallint, integer, bigint, numeric, real, double precision 모두에 사용할 수 있어요. integral_type을 받는 연산자는 smallint, integer, bigint에 사용할 수 있고요. 별도 표기가 없으면 각 연산자는 인자와 같은 데이터 타입을 반환해요. integer + numeric처럼 여러 인자 타입이 섞인 호출은 이 목록에서 더 뒤에 나타나는 타입을 사용해 해석돼요.

연산자 설명 예시
+ 덧셈. 2 + 35
+ (단항) 단항 플러스 (동작 없음). + 3.53.5
- 뺄셈. 2 - 3-1
- (단항) 부호 반전. -(-4)4
* 곱셈. 2 * 36
/ 나눗셈. (정수 타입에서는 0 방향으로 잘림) 5.0 / 22.5000000000000000, 5 / 22, (-5) / 2-2
% 모듈로(나머지). smallint·integer·bigint·numeric에 사용 가능. 5 % 41
^ 거듭제곱. 2 ^ 38
|/ 제곱근. |/ 25.05
||/ 세제곱근.

거듭제곱 ^는 흔한 수학 관례와 달리 기본적으로 왼쪽에서 오른쪽으로 결합해요. 그래서 2 ^ 3 ^ 3512, 괄호를 친 2 ^ (3 ^ 3)134217728이 돼요.

수학 함수

많은 수학 함수는 인자 타입이 다른 여러 형태로 제공돼요. 자주 쓰는 것들을 보면 이렇습니다.

  • abs(x) → 절댓값. abs(-17.4)17.4
  • cbrt(x) → 세제곱근. cbrt(64.0)4
  • ceil(x) / ceiling(x) → 인자보다 크거나 같은 가장 가까운 정수. ceil(42.2)43, ceil(-42.8)-42
  • div(y, x)y / x의 정수 몫 (0 방향으로 잘림). div(9, 4)2
  • floor(x) → 인자보다 작거나 같은 가장 가까운 정수.
  • gcd(a, b) / lcm(a, b) → 최대공약수 / 최소공배수. gcd(1071, 462)21
  • ln(x) / log(x) → 자연로그 / 상용로그(밑 10). ln(2.0)0.6931471805599453
  • log(b, x) → 밑이 b인 로그.
  • mod(y, x)y / x의 나머지. mod(9, 4)1
  • pi() → π의 근삿값.
  • power(a, b)a^b.
  • round(x) / round(x, n) → n 자리까지 반올림. round(42.4382, 2)42.44
  • sign(x) → 부호 (-1, 0, +1).
  • sqrt(x) → 제곱근.
  • trunc(x) / trunc(x, n) → 0 방향으로 버림. trunc(42.4382, 2)42.43
  • width_bucket(operand, low, high, count) → 히스토그램 버킷 계산.

삼각 함수

각 삼각 함수는 라디안을 쓰는 버전과 도(degree)를 쓰는 버전 두 가지가 있어요.

함수 설명 예시
acos(x) 아크코사인 (라디안). acos(1)0
acosd(x) 아크코사인 (도). acosd(0.5)60
asin(x) / asind(x) 아크사인 (라디안 / 도). asin(1)1.5707963267948966, asind(0.5)30
atan(x) / atand(x) 아크탄젠트 (라디안 / 도). atan(1)0.7853981633974483, atand(1)45
atan2(y, x) / atan2d(y, x) y/x의 아크탄젠트 (라디안 / 도). atan2(1, 0)1.5707963267948966, atan2d(1, 0)90
cos(x) / cosd(x) 코사인 (라디안 / 도). cos(0)1, cosd(60)0.5
cot(x) / cotd(x) 코탄젠트 (라디안 / 도). cot(0.5)1.830487721712452, cotd(45)1
sin(x) / sind(x) 사인 (라디안 / 도). sin(1)0.8414709848078965, sind(30)0.5
tan(x) / tand(x) 탄젠트 (라디안 / 도). tan(1)1.5574077246549023, tand(45)1

도 단위 각도를 다루는 또 다른 방법은 앞서 본 radians()·degrees() 단위 변환 함수를 쓰는 거예요. 하지만 도 단위 삼각 함수를 쓰는 게 권장되는데, sind(30) 같은 특수한 경우 반올림 오류를 피할 수 있어서예요.

쌍곡선 함수

쌍곡선 함수도 제공돼요.

  • sinh(x) → 쌍곡사인. sinh(1)1.1752011936438014
  • cosh(x) → 쌍곡코사인. cosh(0)1
  • tanh(x) → 쌍곡탄젠트. tanh(1)0.7615941559557649
  • asinh(x) / acosh(x) / atanh(x) → 역쌍곡사인 / 역쌍곡코사인 / 역쌍곡탄젠트. asinh(1)0.881373587019543, acosh(1)0, atanh(0.5)0.5493061443340548

더 알아보기 (Learn more)