PostgreSQL中如何按特定值排序?优先展示指定值数据
解决SQL优先展示特定ID数据的排序问题
你的原语句没生效,是因为多数数据库里,id = 'd189463e-52dc-40e5-adf7-eddce74cf05e'这个布尔判断的结果,true对应数值1,false对应0。默认升序排序时,0会排在1前面,所以匹配的行反而被放到了后面,和你想要的优先展示正好相反。
给你几个可行的修正方案:
最简单的调整:加降序排序
直接在排序条件后加DESC,让匹配结果为1的行(也就是目标ID的行)排在最前面:SELECT name FROM test ORDER BY id = 'd189463e-52dc-40e5-adf7-eddce74cf05e' DESC;通用兼容方案:用CASE WHEN指定权重
如果你的数据库对布尔值排序支持有限,用CASE语句明确给目标ID分配更高的优先级(权重越小排得越前),还可以额外加其他排序条件保证结果稳定:SELECT name FROM test ORDER BY CASE WHEN id = 'd189463e-52dc-40e5-adf7-eddce74cf05e' THEN 0 ELSE 1 END, id; -- 这里可以换成你需要的其他排序字段MySQL专属优化:用FIELD函数
如果你用的是MySQL,FIELD函数可以直接指定值的优先级,不存在的会返回0,降序后目标ID的行就会排在最前:SELECT name FROM test ORDER BY FIELD(id, 'd189463e-52dc-40e5-adf7-eddce74cf05e') DESC;
内容的提问来源于stack exchange,提问作者hololensen
相关产品推荐
相关产品推荐

