PostgreSQL에서 무작위 값을 생성하는 데 사용되는 random() 함수는 데이터베이스에서 임의의 숫자를 생성할 때 유용하며, 다양한 상황에서 활용될 수 있습니다. 예를 들어, 샘플 데이터 생성, 무작위 레코드 선택, 확률적인 처리 등에 사용됩니다.
1. random() 함수란?
PostgreSQL에서 random() 함수는 0 이상 1 미만의 부동 소수점 값(float) 을 반환하는 함수입니다. 이 함수는 난수를 생성하는 데 사용되며, 기본적으로 반환되는 값의 범위는 다음과 같습니다.
- 범위: 0 ≤ random() < 1 (0과 1은 포함하지 않음)
기본 사용법:
SELECT random();
실행 시, random()은 매번 다른 소수점 값을 반환합니다.
SELECT random();
-- 예시 출력: 0.726374829498291
2. random() 함수의 다양한 활용
1) 범위 내의 정수 생성
random() 함수는 기본적으로 0과 1 사이의 소수를 반환하지만, 이를 응용하여 특정 범위 내의 정수를 생성할 수 있습니다. 원하는 정수를 생성하려면 random() 값에 범위 크기를 곱한 후 floor() 또는 round() 함수를 사용하여 소수점을 제거합니다.
-- 0 이상 9 이하의 무작위 정수 생성
SELECT floor(random() * 10) AS random_integer;
이 코드는 0부터 9까지의 정수를 무작위로 반환합니다. random() * 10은 0 이상 10 미만의 부동 소수점을 만들고, floor() 함수를 통해 소수점을 내림하여 정수로 변환합니다.
2) 범위 내의 임의의 소수점 수 생성
특정 범위 내에서 임의의 소수점 값을 생성하고자 할 때는 random()에 원하는 범위를 곱하고, 필요한 만큼 값을 조정합니다.
-- 1.0 이상 10.0 미만의 무작위 소수점 값 생성
SELECT random() * 9 + 1 AS random_float;
위 코드에서는 random() 함수에 9를 곱하여 0 이상 9 미만의 값을 만들고, 거기에 1을 더해 1.0 이상 10.0 미만의 값을 생성합니다.
3. random()을 이용한 데이터베이스 내 작업
1) 무작위 레코드 선택
데이터베이스에서 random() 함수를 사용하면 테이블에서 임의의 레코드를 선택할 수 있습니다. 예를 들어, 100개의 사용자 중에서 무작위로 한 명의 사용자를 선택하려고 할 때 유용합니다.
-- 'users' 테이블에서 임의의 한 명의 사용자를 선택
SELECT *
FROM users
ORDER BY random()
LIMIT 1;
위 쿼리는 random()을 통해 모든 사용자에게 무작위 값을 부여하고, 그 값을 기준으로 정렬한 후 첫 번째 레코드를 반환합니다.
2) 샘플링 (랜덤하게 여러 레코드 선택)
특정 비율로 데이터를 무작위로 선택할 때 random()을 조건절로 활용할 수 있습니다. 예를 들어, 전체 데이터 중 10%를 무작위로 선택하려면 다음과 같이 사용할 수 있습니다.
-- 'orders' 테이블에서 10%의 무작위 레코드 선택
SELECT *
FROM orders
WHERE random() < 0.1;
이 쿼리는 random() 함수가 반환하는 값이 0.1보다 작은 경우(즉, 10% 확률) 해당 레코드를 선택합니다. 이를 통해 테이블에서 랜덤한 샘플링을 할 수 있습니다.
3) 무작위 데이터로 테이블 업데이트
random() 함수를 이용해 테이블의 특정 필드를 임의의 값으로 업데이트할 수도 있습니다. 예를 들어, 사용자들의 포인트를 무작위로 설정하고 싶을 때 다음과 같이 할 수 있습니다.
-- 'users' 테이블의 모든 사용자에게 0부터 100까지의 무작위 포인트 할당
UPDATE users
SET points = floor(random() * 101);
위 쿼리는 모든 사용자에 대해 0부터 100까지의 임의의 정수를 points 필드에 할당합니다.
4. random() 함수와 함께 사용되는 주요 함수들
random() 함수는 다양한 함수들과 결합되어 더 유용하게 사용할 수 있습니다.
- floor(): 소수점을 내림하여 정수로 변환하는 함수.
- ceil(): 소수점을 올림하여 정수로 변환하는 함수.
- round(): 소수점을 반올림하여 정수로 변환하는 함수.
예를 들어, round() 함수와 결합하여 소수점을 반올림한 무작위 정수를 생성할 수 있습니다.
-- 1부터 10까지의 무작위 정수 생성 (반올림)
SELECT round(random() * 9 + 1) AS random_rounded_integer;
PostgreSQL의 random() 함수는 다양한 상황에서 사용할 수 있는 강력한 도구입니다. 무작위 레코드 선택, 샘플 데이터 생성, 특정 범위의 임의 값 생성 등 다양한 작업에 활용할 수 있습니다. 특히 데이터베이스의 샘플링 작업이나 실험 데이터를 만들 때 random() 함수를 활용하면 쉽게 무작위 데이터를 처리할 수 있습니다.
'Develop' 카테고리의 다른 글
[PostgreSQL] 오브젝트 안에서 로그 찍기 - RAISE 사용해서 출력 (7) | 2024.10.11 |
---|---|
[PostgreSQL] 날짜 더하기, 빼기, 일수 차이 구하기 INTERVAL (5) | 2024.10.10 |
[HTML] html 에서 데이터 data 속성 쉽게 사용하기 (5) | 2024.10.10 |
[JavaScript] 비구조화 할당 (Destructuring Assignment) 배열 또는 객체의 값 추출 (12) | 2024.10.09 |
[JavaScript] 배열에서 객체(오브젝트)의 위치를 찾는 방법 - indexOf 대신 findIndex 활용하기 (3) | 2024.10.08 |