使用Pandas获取col1唯一值对应col3最大值及对应col2值
解决方案
假设你的数据结构如下(根据图片示例还原):
| col1 | col2 | col3 |
|---|---|---|
| A | X | 10 |
| A | Y | 20 |
| B | Z | 15 |
| B | W | 15 |
| C | V | 5 |
下面提供两种常用的实现方式:
方法一:使用窗口函数(推荐,适用于支持窗口函数的数据库:MySQL 8+、PostgreSQL、SQL Server等)
如果需要在多个相同最大值的行中仅保留一条(随机选择),用ROW_NUMBER():
SELECT col1, col2, col3 AS max_col3 FROM ( SELECT col1, col2, col3, ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col3 DESC) AS rn FROM your_table ) t WHERE rn = 1;
如果需要保留所有col3等于最大值的行(比如上面B对应的Z和W都要),替换ROW_NUMBER()为RANK():
SELECT col1, col2, col3 AS max_col3 FROM ( SELECT col1, col2, col3, RANK() OVER (PARTITION BY col1 ORDER BY col3 DESC) AS rn FROM your_table ) t WHERE rn = 1;
方法二:子查询关联(兼容旧版本数据库)
先分组获取每个col1对应的col3最大值,再关联原表匹配对应的col2:
SELECT t1.col1, t1.col2, t2.max_col3 FROM your_table t1 JOIN ( SELECT col1, MAX(col3) AS max_col3 FROM your_table GROUP BY col1 ) t2 ON t1.col1 = t2.col1 AND t1.col3 = t2.max_col3;
注意:这种方式会返回所有col3等于最大值的行,如果要仅保留一条,需要额外处理(比如加DISTINCT或者结合排序取第一条,不同数据库语法略有差异)。
内容的提问来源于stack exchange,提问作者mgn
相关产品推荐
相关产品推荐

