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

SQL排序需求:按2022年损失排序并保持同部件两行关联

问题:按部件关联排序数据集,保持同部件两行数据相邻
  • 数据集每个部件对应2行数据(分别为2021年、2022年记录),共16列
  • volume_loss字段仅2022年有数值,2021年该字段值始终为null
  • 需求:按2022年的volume_loss降序排序整个数据集,同时保证每个部件的两行数据始终关联在一起

用户尝试使用PARTITION BY实现,但未达到预期,代码如下:

SELECT *,
       ROW_NUMBER() OVER (PARTITION BY part ORDER BY volume_loss DESC) as [row_number]
FROM DF

正确实现方式

要实现目标,核心是先为每个部件获取对应的2022年volume_loss值,再基于这个值对全量数据排序:

方法1:子查询关联获取排序键

SELECT df.*
FROM DF df
JOIN (
    SELECT part, MAX(volume_loss) AS part_loss
    FROM DF
    GROUP BY part
) part_losses ON df.part = part_losses.part
ORDER BY part_losses.part_loss DESC, df.year
  • 子查询通过MAX(volume_loss)提取每个部件的2022年loss值(2021年为null,MAX会自动取非空的2022年数据)
  • 主查询关联后,按部件的loss值降序排序,同部件的两行会自然相邻;最后按年份排序可固定2021/2022的显示顺序(可选)

方法2:窗口函数直接生成排序键

SELECT *,
       MAX(volume_loss) OVER (PARTITION BY part) AS part_loss
FROM DF
ORDER BY part_loss DESC, year
  • 使用MAX() OVER (PARTITION BY part)为每一行生成对应部件的2022年loss值
  • 直接按生成的part_loss降序排序,即可实现同部件行关联,同时整体按loss排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:30:50