如何将document_status为RESULTANT的记录置底,其余按id升序排序?
正确的SQL实现方案
正确SQL语句
SELECT l.id, l.document_number, l.document_status FROM load_record l ORDER BY (l.document_status = 'RESULTANT') ASC, l.id ASC;
原语句问题分析
你之前的SQL把l.id ASC作为第一排序条件,这会让所有记录先按id升序排列,优先级远高于状态判断条件。所以id=3的RESULTANT记录会直接排在id=4、5的前面,第二个排序条件完全起不到作用。
正确逻辑说明
- 第一排序条件:
(l.document_status = 'RESULTANT') ASC
在SQL中,布尔表达式l.document_status = 'RESULTANT'会被转换为数值:符合条件返回1,不符合返回0。按升序排列时,0(非RESULTANT记录)会全部排在1(RESULTANT记录)的前面,实现把RESULTANT记录置底的需求。 - 第二排序条件:
l.id ASC
在非RESULTANT的分组内,所有记录按id升序排列;RESULTANT分组内也按id升序(这里仅一条记录,不影响结果),满足其余记录按id排序的要求。
内容的提问来源于stack exchange,提问作者Chris G
相关产品推荐
相关产品推荐

