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

如何获取每年最高round对应的raceid:解决group by无法选非分组列问题

解决方案

方案1:窗口函数法(推荐)

支持PostgreSQL、MySQL 8.0+、SQL Server、Oracle等所有主流新版数据库,写法简洁性能优异:

WITH ranked_races AS (
    SELECT 
        raceid,
        year,
        round,
        -- 按年份分组,组内按轮次倒序排名
        ROW_NUMBER() OVER (PARTITION BY year ORDER BY round DESC) AS rn
    FROM races
)
-- 取每个年份排名第一的记录,就是当年轮次最高的比赛
SELECT year, round, raceid
FROM ranked_races
WHERE rn = 1
ORDER BY year;

如果同一年可能存在多个轮次同为最大值的记录,需要全部返回的话,把ROW_NUMBER()替换为RANK()即可。

方案2:子查询关联法(兼容全版本数据库)

适合不支持窗口函数的旧版数据库使用:

SELECT r.year, r.round, r.raceid
FROM races r
-- 关联你原本的分组查询结果,匹配对应年份的最大轮次
INNER JOIN (
    SELECT year, MAX(round) AS max_round
    FROM races
    GROUP BY year
) t ON r.year = t.year AND r.round = t.max_round
ORDER BY r.year;

注意:不推荐使用关闭SQL模式(如MySQL的ONLY_FULL_GROUP_BY)的方式直接在分组查询中加非分组字段,这种写法是非标准SQL,结果稳定性差且跨数据库兼容性极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:57:03