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

SQL使用ORDER BY实现多条件排序:自定义域优先级+特殊字符后置

解决方案

在ORDER BY子句最前面新增domain字段的自定义优先级规则作为第一排序键,保留你已实现的name排序逻辑作为第二排序键即可。SQL的ORDER BY按书写顺序从左到右判定排序优先级,左侧排序键优先级始终高于右侧,刚好匹配两层排序的需求。

排序逻辑拆解

  • 第一层级(domain自定义分层):通过CASE WHEN给不同domain映射从小到大的数值权重,数值越小排序位置越靠前:
    • domain值为yahoo映射权重0,优先展示
    • domain值为gmail映射权重1,次位展示
    • 其余所有domain统一映射权重2,放在最后
  • 第二层级(分层内name排序):直接复用你已验证过的逻辑:以英文字母开头的name按不区分大小写的字母序排序;特殊字符开头的name前拼接~(该字符ASCII码大于所有英文字母),自动排在同分层末尾。

最终SQL代码

SELECT * FROM table1
ORDER BY
    -- 第一排序键:domain自定义优先级
    CASE
        WHEN domain = 'yahoo' THEN 0
        WHEN domain = 'gmail' THEN 1
        ELSE 2
    END,
    -- 第二排序键:分层内name排序规则
    CASE
        WHEN name GLOB '[A-Za-z]*' THEN name
        ELSE '~' || name
    END COLLATE NOCASE;

如果表中domain存在大小写混合存储的情况(例如Yahoo/GMAIL),可以在domain匹配条件后加COLLATE NOCASE保证匹配准确,例如将判断条件写为WHEN domain = 'yahoo' COLLATE NOCASE THEN 0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:33:11