SQL排序时如何对比同表两行数据实现自定义条件排序
多条件自定义排序实现方案
方案1:原生多字段排序(最简洁,通用所有主流数据库)
这种多优先级排序需求不需要额外写复杂的判断逻辑,直接通过ORDER BY指定多字段排序顺序即可,字段顺序对应排序优先级:
- 第一优先级对比
total_score字段 total_score相等时,自动触发第二优先级对比mcq_score字段
示例代码(假设表名为score_table,按降序排序,和你期望的结果匹配):
SELECT id, total_score, mcq_score FROM score_table ORDER BY total_score DESC, mcq_score DESC;
方案2:条件语句实现(符合要求的条件判断写法)
如果需要显式通过条件语句控制排序逻辑,可以用CASE WHEN实现,效果和方案1完全一致:
SELECT id, total_score, mcq_score FROM score_table ORDER BY -- 第一排序条件:按total_score排序 CASE WHEN total_score IS NOT NULL THEN total_score END DESC, -- 第二排序条件:total_score相等时触发,按mcq_score排序 CASE WHEN mcq_score IS NOT NULL THEN mcq_score END DESC;
输出结果验证
两种方案执行后得到的结果和预期完全一致:
| id | total_score | mcq_score |
|---|---|---|
| 2 | 50 | 40 |
| 1 | 50 | 30 |
| 3 | 50 | 20 |
内容的提问来源于stack exchange,提问作者Evan Shareef
相关产品推荐
相关产品推荐

