>데이터 베이스 >MySQL 튜토리얼 >SQL을 사용하여 가중 확률이 있는 테이블에서 행을 무작위로 선택하려면 어떻게 해야 합니까?

SQL을 사용하여 가중 확률이 있는 테이블에서 행을 무작위로 선택하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-26 06:55:15498검색

How Can I Randomly Select a Row from a Table with Weighted Probability Using SQL?

가중 확률을 사용한 임의 행 선택

열 ID, 내용, 가중치가 있는 테이블을 고려하여 행을 무작위로 선택하는 작업입니다. 무게를 고려하면서. 가중치가 각각 60, 40, 100인 세 개의 행이 있는 시나리오에서 과제는 다음과 같이 각 행을 선택할 확률을 계산하는 것입니다.

  • 행 1: 30% 확률
  • 2행: 20% 확률
  • 3행: 50% Chance

Weighted Reservoir Sampling

이 문제에 대한 최적의 접근 방식은 가중치에 비례하는 확률로 항목을 효과적으로 선택할 수 있는 Weighted Reservoir Sampling입니다. 적용 방법은 다음과 같습니다.

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;

이 SQL 쿼리는 다음 논리를 사용합니다.

  • 난수를 나눈 음의 로그로 계산된 우선순위와 각 행을 연결합니다. 행의 가중치를 기준으로 합니다.
  • 우선순위에 따라 행을 정렬하면 가중치가 높은 행이 상위에 나타날 확률이 높아집니다.
  • 결과를 단일 행으로 제한하면 가중 확률로 무작위로 선택된 행이 생성됩니다.

이 가중 저장소 샘플링 기법을 사용하면 여러 행을 선택하거나 심지어 전체 테이블에 가중 확률이 적용되어 다양한 데이터 선택 시나리오에 적합한 다목적 솔루션입니다.

위 내용은 SQL을 사용하여 가중 확률이 있는 테이블에서 행을 무작위로 선택하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.