如何在BigQuery中按分组获取最大值对应的记录?
解决方案:按分组提取最大值对应完整记录
针对你遇到的问题——按Column A分组后,无法获取Column C最大值对应的Column B值,这里提供两种简洁优雅的方案:
方案一:使用窗口函数(推荐,现代SQL数据库适用)
如果你的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、SQL Server、Oracle等),这是最简洁高效的方式:
SELECT ColumnA, ColumnB, ColumnC FROM ( SELECT ColumnA, ColumnB, ColumnC, -- 按ColumnA分组,每组内按ColumnC降序编号 ROW_NUMBER() OVER (PARTITION BY ColumnA ORDER BY ColumnC DESC) AS row_num FROM your_table_name ) ranked_data WHERE row_num = 1;
说明:
PARTITION BY ColumnA:将数据按Column A分组ORDER BY ColumnC DESC:每组内按Column C从大到小排序,确保最大值排在第一位ROW_NUMBER():给每组内的行分配唯一编号,最大值对应的行编号为1- 若同一组存在多条
Column C等于最大值的记录,ROW_NUMBER()会随机保留一条;如果需要保留所有最大值记录,可替换为RANK()或DENSE_RANK()
方案二:子查询关联(兼容旧版本数据库)
如果你的数据库不支持窗口函数(如MySQL 5.x),可以用子查询+关联的方式实现:
SELECT t1.ColumnA, t1.ColumnB, t1.ColumnC FROM your_table_name t1 INNER JOIN ( -- 先获取每组ColumnA对应的最大ColumnC值 SELECT ColumnA, MAX(ColumnC) AS max_colc FROM your_table_name GROUP BY ColumnA ) t2 ON t1.ColumnA = t2.ColumnA AND t1.ColumnC = t2.max_colc;
说明:
- 子查询先计算出每个
Column A分组对应的Column C最大值 - 再通过
INNER JOIN将原表与子查询结果关联,匹配Column A和Column C等于最大值的记录,从而获取对应的Column B - 此方法会返回同一组内所有
Column C等于最大值的记录
内容的提问来源于stack exchange,提问作者pbere
相关产品推荐
相关产品推荐

