mySQL - 根据顺序值选择记录,然后在一个查询中随机记录

标签 mysql sql random sql-order-by

我希望有一个 mySQL 查询,可以在其中选择设置为特定值的所有记录,然后以随机顺序从剩下的记录中选择许多其他记录。

为了解释,这里有一个示例:(MyTable 数据库表)

ID        Name        SomeValue
1         Fred        0
2         Jake        0
3         Jone        1
4         Bill        0
5         Greg        0
6         Thom        2
7         Jane        3
8         Erin        0

首先,我想选择 SomeValue 大于 0 的所有记录。相应的 mySQL 查询是:

SELECT * FROM MyTable WHERE SomeValue > 0 ORDER BY SomeValue DESC

这将返回:

7         Jane        3
6         Thom        2
3         Jone        1

接下来(在同一个查询中),如何从剩余的记录中随机选择 3 个其他记录(限制 6 个)?

返回的记录的最终结果如下所示:

7         Jane        3
6         Thom        2
3         Jone        1
5         Greg        0    // Randomly picked
1         Fred        0    // Randomly picked
8         Erin        0    // Randomly picked

最佳答案

使用union all:

(select t.*
 from t
 where somevalue > 0
) union all
(select t.*
 from t
 where somevalue = 0
 order by rand()
 limit 3
);

如果您希望按 somevalue 排序值,请添加 order by somevalue 作为查询的最后一行。

关于mySQL - 根据顺序值选择记录,然后在一个查询中随机记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056026/

相关文章:

mysql - Yii + MySQL 错误 1064

php - 无法使用 PHP 表单编辑表中的数据

c# - SqlDataReader.Read() 在 C# 中始终为 false

mysql - SQL查询问题-有六个表的困难查询

c - 仅包含 "* "和 "SPACE "的输入随机矩阵

java - 防止冗余随机数

.net - System.Guid.NewGuid() 的随机性如何? (拿两个)

php - 向表中插入数据并立即选择该行的ID号

mysql - 索引所有 Vs。索引一些

sql - 使用sql获取字符串中多个值的多个id?