Nano Hash - криптовалюты, майнинг, программирование

Случайная запись MySQL со смещением

Я хотел бы выбрать случайную запись из таблицы, но с уклоном в сторону более высоких значений в определенном поле - я не хочу, чтобы какая-либо запись имела вероятность выбора 0%, просто с меньшей вероятностью быть выбранным.

Из этой статьи я знаю, что случайный выбор может быть медленным, и вы можете ускорить его: http://wanderr.com/jay/order-by-slow/2008/01/30/

Но как насчет того, когда вы имеете дело с несколькими таблицами с соединениями и оператором where и хотите использовать одно из полей как способ сместить случайность (чем выше значение этого поля, тем больше вероятность того, что оно будет выбрано)? Например:

SELECT a.id, a.date, a.userid, b.points FROM table_a AS a INNER JOIN table_b AS b ON (a.userid = b.userid) WHERE DATE_SUB(CURDATE(), INTERVAL 60 DAY) <= a.date

Как я мог бы превратить приведенное выше в эффективный, но не действительно случайный запрос, который был бы смещен в сторону более высоких значений b.points?


Ответы:


1

мои 2 цента, предвзятые могут быть выполнены следующим образом:

Предположим, что оценка находится в диапазоне от 0 до 100.

Вы случайным образом выбираете 5 записей >75, 3 записи >50, 2 записи >25, 1 запись >0

Теперь, если вы снова произведете случайный выбор из этих 11 записей, он будет смещен в сторону более высокого балла.

Чтобы поместить их в sql, назовите вашу объединенную таблицу "abc"

Select * from (
select * from abc where b.points > 75 order by rand() limit 5
cross join 
select * from abc where b.points > 50 and b.points <75 order by rand() limit 3
cross join 
select * from abc where b.points > 25 and b.points <50 order by rand() limit 2
cross join 
select * from abc where b.points > 0 and b.points <25 order by rand() limit 1
) as result
order by rand() limit 3

Что касается производительности, я посмотрю на вашу ссылку и обновлю этот ответ.

01.08.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..