mySQL随机选择概率

标签 mysql sql

假设我有一个带有整数字段的数据库表 - 将其称为“flavour”,并且该字段的值只能是数字 1 到 10。

有没有办法从数据库中选择一个随机行,有 20% 的几率是第六味,30% 的几率是第二味,50% 的几率是第一味?


抱歉回复晚了 - 非常感谢您的帮助。 Eugen 的回答似乎最能满足我的需要;我知道 ORDER BY rand() 的危险,但我正在编写的应用程序不会在大型数据源上运行,或者必须支持许多并发用户。所以我会接受它并接受性能损失。

最佳答案

SELECT
  IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
FROM
  (SELECT @rnd:=rand()) AS rndinit;

为您提供所需概率的 flavor 。

SELECT * FROM tablename ORDER BY rand() LIMIT 1

给你一个随机行。现在我们把它放在一起:

SELECT
  tablename.*
FROM
  tablename
  INNER JOIN (
    SELECT
      IF(@rnd<0.5,1,IF(@rnd<0.8,2,6)) AS rndflavour
    FROM
      (SELECT @rnd:=rand()) AS rndinit
  ) AS rndview ON rndview.rndflavour=tablename.flavour
ORDER BY rand()
LIMIT 1

关于mySQL随机选择概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792426/

相关文章:

php - 用 Laravel 编写的站点事件时间线的数据库结构

用于创建外键的 MySQL 风格

mysql - 选择具有用户自己的时间范围的行

php - Mysql查询有两个表php

sql - 如何找出 SQL Server 中引用表的 FOREIGN KEY 约束?

mysql - 根据条件检索值

php - MySQL 插入循环只插入一行

sql - 下表应该如何归一化?

c# - lambda 表达式中的 SQL double 'IN' 子句

SQL检查表是否存在并截断