mysql - 在MySQL中进行特殊排序,3个随机最高分,比所有随机

标签 mysql sql random subquery union

我想要一个 MYSQL 语句,它接受三个分数(4 或 5)并将它们排序在查询结果的顶部。然后,之后的结果应该都是随机的,但不会重复前 2 个。

我尝试使用相同的随机数种子执行 UNION ALL 语句,但 NOT IN 语句不喜欢在子查询中具有“限制”。我认为我需要在 NOT IN 语句之后对子查询进行某种类型的转换。想法?

select * from (select * from mydb.mytable where score in (5,4) order by rand(3423)     limit 3) toplist1
UNION all
select *
from mydb.mytable allothers
where allothers.reviewid NOT IN (select reviewid from mydb.mytable where score in (5,4)     order by rand(3423) limit 3)
order by rand(45423)

最佳答案

也许...

Select * from (
  select A.*, 0 as OrderVal
  from mydb.mytable A
  where score in (5,4) 
  order by rand(3423)     
  limit 3) A
UNION all (
  select *, 1 as orderval
  from mydb.mytable allothers
  where allothers.reviewid NOT IN (
   select reviewid 
   from mydb.mytable 
   where score in (5,4)     
   order by rand(3423) 
   limit 3)
  ) B
ORDER BY orderVal, rand(3423)

关于mysql - 在MySQL中进行特殊排序,3个随机最高分,比所有随机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24638945/

相关文章:

mysql - ARel 中的案例陈述

mysql - 为什么删除重复记录时出现 max(rowid) 或 min(rowid) ?

sql - 如何在 Oracle SQL 中检索父行的所有递归子行?

java - 在 Java 中生成随机唯一序列

c# - 如何以 "natural"方式高效地在 2D 表面上展开对象?

mysql - SQL VIEW简化/解决更快的查询

PHP mySQL numRows() 用法和错误?

mysql - 使用多个计数语句进行查询

c# - 上传图片 - 外键冲突

sql - 使用选择查询加入 postgres 中的系列