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

如何查找表中与行关联的最大INT值?含示例及错误尝试

解决表中按键关联获取最高speed对应行的问题

嘿,我懂你碰到的麻烦了——当你想拿到每个键对应的最高speed那一行数据时,直接用MAX()搭配GROUP BY很容易踩坑:数据库只会保证聚合函数(比如MAX(speed))的结果是对的,但其他非聚合列(比如你的键关联的其他字段)可能会随机返回某一行的值,导致出现“speed是最高的,但对应键不对”的情况。

下面给你几种靠谱的解决方案,适配不同的数据库场景:

方法1:用窗口函数(推荐,现代数据库首选)

如果你的数据库支持窗口函数(比如MySQL 8+、PostgreSQL、SQL Server、Oracle),用ROW_NUMBER()是最清晰的方式:

SELECT key_column, speed, other_columns
FROM (
    SELECT 
        key_column, 
        speed, 
        other_columns,
        -- 按key分组,每组内按speed降序排序,给最高speed的行标1
        ROW_NUMBER() OVER (PARTITION BY key_column ORDER BY speed DESC) AS row_rank
    FROM table_a
) ranked_data
WHERE row_rank = 1;
  • 说明:PARTITION BY key_column会把数据按你的键分成一个个小组,ORDER BY speed DESC让每组里speed最高的行排在最前面,ROW_NUMBER()给它标记为1,最后筛选出标记为1的行就是你要的。
  • 小补充:如果存在多个行speed并列最高的情况,ROW_NUMBER()会随机选一个;要是想保留所有并列的最高speed行,把ROW_NUMBER()换成RANK()或者DENSE_RANK()就行。

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

如果你的数据库不支持窗口函数(比如MySQL 5.x),可以先找出每个键对应的最高speed,再和原表关联匹配:

SELECT ta.key_column, ta.speed, ta.other_columns
FROM table_a ta
INNER JOIN (
    -- 先拿到每个key对应的最大speed
    SELECT key_column, MAX(speed) AS max_speed
    FROM table_a
    GROUP BY key_column
) max_speed_data 
ON ta.key_column = max_speed_data.key_column 
AND ta.speed = max_speed_data.max_speed;
  • 说明:子查询先算出每个键的最高speed,然后通过key_column和speed两个条件关联原表,这样就能拿到对应最高speed的整行数据。如果有多个行speed并列最高,这个方法会返回所有符合条件的行。

为什么你之前的尝试会出错?

大概率你之前的代码是类似这样的:

SELECT key_column, MAX(speed) AS max_speed, other_columns
FROM table_a
GROUP BY key_column;

这种写法在某些数据库的宽松模式下能运行,但other_columns并没有和key_column形成函数依赖,数据库会从分组里随机选一行的other_columns值,这就导致了“speed是最高的,但对应键的其他字段不对”的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:19:13