Develop

[PostgreSQL] Random 함수 랜덤으로 목록 조회 및 숫자생성

issuemaker99 2024. 10. 10. 15:21
728x90

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() 함수를 활용하면 쉽게 무작위 데이터를 처리할 수 있습니다.

LIST