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

如何在单条SQL查询中生成双排名并优先展示首排名为1的结果

解决方案

要同时实现生成两种排名并将指定记录置顶的需求,你可以通过子查询生成排名+外层排序置顶的方式完成,修正后的SQL代码如下:

SELECT 
    id, 
    name, 
    password, 
    oldname, 
    number,
    rank_mx,
    rank_number
FROM (
    SELECT 
        id, 
        name, 
        password, 
        oldname, 
        number,
        -- 基于oldname="mxmx"匹配结果降序的排名,匹配成功的记录排名为1
        RANK() OVER(ORDER BY (oldname = 'mxmx') DESC) AS rank_mx,
        -- 基于number字段降序的排名
        RANK() OVER(ORDER BY number DESC) AS rank_number
    FROM account
) AS ranked_result
ORDER BY 
    -- 将rank_mx=1的记录强制排在首位
    CASE WHEN rank_mx = 1 THEN 0 ELSE 1 END,
    -- 其余记录按rank_mx顺序排列,也可根据业务需求替换为rank_number
    rank_mx,
    rank_number;

关键说明

  1. 修正语法问题:原SQL中第二个RANK()函数未分配别名,导致语法错误,这里给两个窗口函数分别命名为rank_mx和rank_number,清晰区分两种排名逻辑。
  2. 置顶指定记录:外层查询通过CASE表达式设置排序优先级,让rank_mx=1的记录优先级为0,其余为1,确保这类记录始终出现在结果最前面。
  3. 排名逻辑解析:
    • rank_mx:oldname="mxmx"的记录会被标记为true(数值等价于1),降序排序后这类记录排名为1;其他记录标记为false(数值等价于0),排名靠后。
    • rank_number:严格按照number字段数值从大到小生成排名,相同number值的记录会获得相同排名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:10:37