如何按ID提取对应最大VALUE的SQL语句及Excel实现方法
解决重复ID取最大VALUE的SQL及Excel方案
SQL实现方法
方法一:窗口函数(推荐,适配主流数据库)
适用于MySQL 8.0+、SQL Server、PostgreSQL等支持窗口函数的数据库,能精准取到每个ID对应最大VALUE的唯一行:
WITH ranked_data AS ( SELECT ID, VALUE, -- 把需要保留的其他字段也加在这里 ROW_NUMBER() OVER (PARTITION BY ID ORDER BY VALUE DESC) AS rn FROM your_extracted_dataset ) SELECT ID, VALUE -- 同步保留其他字段 FROM ranked_data WHERE rn = 1;
如果同一个ID存在多行VALUE同为最大值的情况,ROW_NUMBER()会随机返回其中一行;若要保留所有最大值行,把ROW_NUMBER()换成RANK()或DENSE_RANK()即可。
方法二:子查询关联(兼容旧版本数据库)
针对不支持窗口函数的老版本数据库,先提取每个ID的最大VALUE,再关联原数据集匹配对应行:
SELECT t1.ID, t1.VALUE -- 按需添加其他字段 FROM your_extracted_dataset t1 INNER JOIN ( SELECT ID, MAX(VALUE) AS max_val FROM your_extracted_dataset GROUP BY ID ) t2 ON t1.ID = t2.ID AND t1.VALUE = t2.max_val;
注:若同一ID有多行VALUE等于最大值,该语句会返回所有这些行;如需唯一行,可结合DISTINCT或额外条件筛选(比如取其他字段的极值)。
Excel处理方案
方法一:数据透视表(快速高效)
- 选中数据集区域,点击「插入」→「数据透视表」,按向导完成创建。
- 在字段列表中,将「ID」拖至「行」区域,「VALUE」拖至「值」区域;点击值区域的「VALUE」,选择「值字段设置」,将计算类型改为「最大值」。
- 若需保留其他字段,可将其拖至「值」区域,按需设置为「最大值」或「最小值」(确保匹配最大VALUE对应的行数据)。
方法二:函数组合(精准匹配单一行)
假设ID在A列、VALUE在B列,步骤如下:
- 在C列输入公式
=MAXIFS(B:B,A:A,A2),下拉填充,得到每个ID对应的最大VALUE。 - 在D2输入数组公式
=INDEX(A:A,MATCH(1,(A:A=A2)*(B:B=C2),0)),按Ctrl+Shift+Enter确认(Excel 365直接回车),下拉获取对应ID;同理可复制公式修改列号,获取其他字段数据。 - 选中结果区域,复制后粘贴为值,再点击「数据」→「删除重复值」,以「ID」为依据删除重复项,最终得到每个ID对应最大VALUE的唯一行。
内容的提问来源于stack exchange,提问作者PastaITA
相关产品推荐
相关产品推荐

