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

为何使用MAX聚合函数的SQL PIVOT会返回同一职业的多个值?

为什么使用MAX聚合函数后同一职业仍返回多个值?

这问题的核心在于你添加的ROW_NUMBER(),它直接改变了PIVOT的分组逻辑,拆解来看:

  1. 子查询里的ROW_NUMBER作用
    子查询中ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name)会按职业分组,每组内按姓名排序,给每行分配一个唯一的行号rn:

    • Doctor组:George(rn=1)、Smith(rn=2)
    • Professor组:Baker(rn=1)
    • Singer组:Davis(rn=1)、Head(rn=2)
    • Actor组:Miller(rn=1)
  2. PIVOT的分组依据
    PIVOT执行时,会把除了聚合列(Name)和转置列(Occupation)之外的所有列作为分组键,这里就是rn。所以PIVOT会按rn的值分成两组:rn=1和rn=2。

    • 对于rn=1的组:每个职业下只有一个对应的Name,MAX(Name)就是这个Name本身,对应结果的第一行。
    • 对于rn=2的组:只有Doctor和Singer有对应的数据,其他职业没有rn=2的行,所以返回NULL,MAX(Name)取到的就是这两个职业的第二个Name,对应结果的第二行。
  3. 移除ROW_NUMBER后的变化
    如果去掉rn,子查询只有Occupation和Name两列,PIVOT就没有额外的分组键,会把整个表作为一个分组。这时候每个职业下取MAX(Name),只会得到一行结果:

    DoctorProfessorSingerActor
    SmithBakerHeadMiller

简单说,ROW_NUMBER()给每行加了“组标识”,让PIVOT按行号分组聚合,而非按职业整体聚合,所以同一职业会在不同行号组里出现多个值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:44:52