使用MySQL select query对特定数据组的记录进行随机排序

使用MySQL select query对特定数据组的记录进行随机排序,mysql,sql,select,sql-order-by,Mysql,Sql,Select,Sql Order By,我有下面的db表结构: Tablename : agency_mst Fields: id name is_premium date_added 我想对数据进行排序,以便具有is_premium=1的机构排在第一位,其余数据按date\u added desc顺序进行排序 但是,is_premium=1记录也应按随机顺序排序。因此,第一批优质机构将有随机订单。如何使用MySQL选择查询来实现这一点 我已经构建了部分查询,但不确定如何过滤特定的数据集。以下是该问题: SELECT * FROM

我有下面的db表结构:

Tablename : agency_mst
Fields:
id
name
is_premium
date_added
我想对数据进行排序,以便具有is_premium=1的机构排在第一位,其余数据按date\u added desc顺序进行排序

但是,is_premium=1记录也应按随机顺序排序。因此,第一批优质机构将有随机订单。如何使用MySQL选择查询来实现这一点

我已经构建了部分查询,但不确定如何过滤特定的数据集。以下是该问题:

SELECT * FROM agency_mst
ORDER BY is_premium DESC, date_added DESC
怎么样

SELECT * 
  FROM agency_mst
 ORDER BY IF(is_premium=1, RAND(), -1.0), date_added DESC
这将对匹配的行使用随机排序,然后将其他行放在最后,并按日期排序

不过,要注意性能<代码>按兰德排序()在任何变体中都是一种臭名昭著的性能反模式,在具有多行的表中

select t1.id,t1.name,t1.is_premium,t1.date_added from 
(select (ROW_NUMBER() over (order by id))* cast(CRYPT_GEN_RANDOM(10) as int) RND,* from agency_mst) t1
order by t1.RND
选择id、名称、is_premium、添加日期,如果(is_premium,rand()*-15,0)作为第一批订单 来自mst机构 按第一批订单、日期添加说明订购
使用rand()*-15检查此项,您得到的结果是,它显示的第一个值和剩余值将为0,并且将按添加的日期进行订购

谢谢,刚刚尝试过此项,但当只有一家机构的is_premium=1时,它就不会位于顶部。对您的查询稍加修改即可修复此问题,如果(is_premium=1,rand(),-1.0)描述,谢谢:) SELECT id, name, is_premium , date_added ,if(is_premium ,rand()*-15,0) as first_order FROM agency_mst ORDER BY first_order, date_added DESC