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

SQL查询:无需JOIN获取各唯一col1对应的最大col2行(百万级表)

无需JOIN实现获取每个col1最大col2对应的行

针对你这个需求,不用JOIN的话,窗口函数是非常高效的解决方案,尤其适配百万级别的数据量——现代数据库对这类函数的优化做得相当到位,不会带来额外的性能负担。

核心思路很简单:给每个col1分组内的行按col2降序排名,然后筛选出排名第一的行,就能直接拿到每个col1对应最大col2的那条完整记录。

具体SQL代码

SELECT col1, col2, col3
FROM (
    SELECT 
        col1, 
        col2, 
        col3,
        ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2 DESC) AS rn
    FROM your_table
) t
WHERE rn = 1
ORDER BY col1;

代码细节说明

  • PARTITION BY col1:把整张表的数据按col1拆分成分组,每个分组独立处理
  • ORDER BY col2 DESC:在每个分组内部,按col2从大到小排序,这样最大的col2值会排在分组的第一位
  • ROW_NUMBER():给每个分组内的行分配唯一的排名序号,最大col2对应的行序号为1
  • 外层查询只保留序号为1的行,最后按col1排序就完全匹配你想要的结果

要是你的业务场景里存在同一个col1对应多个相同最大col2值的情况,可以把ROW_NUMBER()替换成RANK(),这样会保留所有col2等于最大值的行;不过从你的示例数据来看,每个col1只有一个最大col2的行,所以ROW_NUMBER()更贴合需求。

这个方案全程不需要JOIN操作,避免了关联查询可能带来的性能损耗,只要你在col1和col2上建立合适的索引,百万级数据的执行速度会非常可观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:13:51