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

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

Linda Hamilton
풀어 주다: 2024-12-23 06:34:47
원래의
679명이 탐색했습니다.

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

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

id, 콘텐츠, 가중치 등의 필드가 있는 테이블을 생각해 보세요. 귀하의 목표는 가중치를 고려하면서 이 테이블에서 단일 행을 무작위로 선택하는 것입니다.

예를 들어 다음 데이터가 포함된 세 개의 행이 있다고 가정합니다.

id, content, weight
1, "some content", 60
2, "other content", 40
3, "something", 100
로그인 후 복사

확률 분포는 다음과 같습니다. :

  • 1행: 30%
  • 2행: 20%
  • 3행: 50%

가중 저장소 샘플링

이를 달성하기 위한 가장 간단한 접근 방식은 가중 저장소 샘플링을 사용하는 것입니다.

SELECT
  id,
  -LOG(RAND()) / weight AS priority
FROM
  your_table
ORDER BY priority
LIMIT 1;
로그인 후 복사

이 방법은 M의 합리적인 선택을 보장합니다. N개 요소 모음에서 요소를 선택합니다. 여기서 각 요소를 선택할 확률은 해당 요소의 가중치에 비례합니다. 단일 요소만 필요한 경우에도 여전히 효과적입니다.

가중 저장소 샘플링의 기본 원리는 제공된 문서에 자세히 설명되어 있습니다. 특히 기사에 설명된 대로 POW(RAND(), 1/weight)의 가장 큰 값이 아닌 -LOG(RAND())/가중치의 가장 작은 값을 선택하는 작업이 포함됩니다. 이는 동일한 결과를 가져옵니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿