【问题标题】:mySQL - Select records based on value in order, then random records in one querymySQL - 按顺序根据值选择记录,然后在一个查询中选择随机记录
【发布时间】:2017-03-27 20:37:18
【问题描述】:

我希望有一个 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

【问题讨论】:

    标签: mysql sql random sql-order-by


    【解决方案1】:

    使用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 作为查询的最后一行。

    【讨论】:

    • 这太完美了,谢谢!出于好奇,这是最有效的方法吗?
    • @VolcovMeter 。 . .这是非常合理的。如果您有一个大表并且许多值是0,那么您可能会担心性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多