You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ORDER BY子句中CASE表达式的行排序逻辑及结果疑问

理解ORDER BY子句中CASE表达式的排序逻辑

样本数据

CREATE TABLE demo_table
(
    ID       INT,
    NAME     VARCHAR(20),
    APPLE    INT,
    ORANGE   INT
);

INSERT INTO demo_table 
VALUES (1, 'John', 45,  7),
       (2, 'Greg', 20, 25),
       (3, 'Alex', 22, 29),
       (4, 'Paul', 50, 55),
       (5,  'Bob', 40, 13);

执行的SQL查询

SELECT * 
FROM demo_table
ORDER BY 
    CASE 
        WHEN APPLE < ORANGE 
            THEN APPLE
        ELSE ORANGE
    END, 
    name DESC

查询输出结果

IDNAMEAPPLEORANGE
1John457
5Bob4013
2Greg2025
3Alex2229
4Paul5055

排序逻辑拆解

你疑惑第二行为什么不是ID=2的Greg,核心是先算出每一行CASE表达式的结果,再看排序顺序:

CASE表达式的规则是:如果APPLE的值小于ORANGE,就取APPLE的数值;否则取ORANGE的数值,SQL默认按这个结果升序排序,若有相同的CASE结果,再按NAME降序排列。

逐个计算每行的CASE结果:

  • John(ID1):45不小于7,取ORANGE=7
  • Bob(ID5):40不小于13,取ORANGE=13
  • Greg(ID2):20小于25,取APPLE=20
  • Alex(ID3):22小于29,取APPLE=22
  • Paul(ID4):50小于55,取APPLE=50

把这些CASE结果按升序排列,顺序为7→13→20→22→50,对应到行就是John→Bob→Greg→Alex→Paul,和输出结果完全一致。因为Bob的CASE结果13比Greg的20小,所以排在Greg前面。

内容的提问来源于stack exchange,提问作者user7481254

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:35:26