MySQL如何实现多列全0行后置其余随机排序的SQL查询
MySQL多字段排序查询方案
你可以直接使用如下SQL语句实现需求,注意将your_table替换为实际的表名:
SELECT * FROM your_table ORDER BY (chat = 0 AND video = 0 AND call = 0) ASC, RAND();
逻辑说明
- MySQL中布尔表达式的结果会隐式转换为整数:表达式成立时返回1,不成立时返回0。
(chat = 0 AND video = 0 AND call = 0)这个判断,在三个字段取值全为0时返回1,其余场景返回0。按该值升序排序时,非全0的行会排在全0行之前。 - 第二个排序条件
RAND()会为每一行生成随机浮点数,同分组内的行按随机值排序,实现随机排列的效果。
小提示:如果你的表数据量超过10万行,
RAND()的随机排序性能会有所下降,小数据量场景下该写法可以直接正常使用。
内容的提问来源于stack exchange,提问作者Tushar Agrawal
相关产品推荐
相关产品推荐

