如何在Google Sheets中按品牌筛选出Top X高营收产品
按品牌提取营收Top5产品的解决方案
针对Google Sheets中无法用Query直接实现按品牌分组取TopN的问题,以下是几种实用解决方法:
方法1:RANK.EQ + FILTER 组合(直观易操作)
- 添加排名列:在空白列(比如E列)输入公式,计算每个产品在所属品牌内的营收排名:
(=RANK.EQ(C2, FILTER(C:C, D:D=D2), 0)C2是当前行营收,D:D=D2限定同品牌范围,0表示降序排名),下拉填充至所有数据行。 - 筛选Top5:用FILTER提取排名≤5的产品,可同时按品牌和营收排序:
(=SORT(FILTER(A:D, E:E<=5), 4, FALSE, 3, FALSE)4是品牌列序号,3是营收列序号,FALSE表示降序)
方法2:动态数组公式(新版Sheets推荐,无需额外列)
直接用LET+BYROW组合实现一次性输出结果,无需手动添加辅助列:
=LET( 品牌列表, UNIQUE(D:D), 品牌排序数据, BYROW(品牌列表, LAMBDA(当前品牌, SORT(FILTER(A:D, D:D=当前品牌), 3, FALSE))), 截取Top5, BYROW(品牌排序数据, LAMBDA(品牌数据, INDEX(品牌数据, SEQUENCE(MIN(5, ROWS(品牌数据))), SEQUENCE(COLUMNS(品牌数据))))), VSTACK(A1:D1, FLATTEN(截取Top5)) )
UNIQUE(D:D)获取所有不重复的品牌BYROW遍历每个品牌,筛选并按营收降序排序该品牌的所有产品- 自动截取每个品牌的前5条数据(产品不足5条时取全部)
- 最后合并表头和结果,输出规整的表格
方法3:Query + 数组辅助(兼容旧版Sheets)
通过构建包含排名的临时数组,再用Query筛选:
=QUERY( {A:D, ARRAYFORMULA(IF(D:D="",, RANK.EQ(C:C, IF(D:D=D:D, C:C), 0)))}, "select Col1,Col2,Col3,Col4 where Col5<=5 order by Col4 desc, Col3 desc", 1 )
{A:D, ...}将排名列拼接至原数据,Col5是新增的排名列- Query语句筛选排名≤5的行,并按品牌、营收降序排列
注意事项
- 确保品牌列的Regexmatch提取结果无空值或错误值,否则会导致分组异常
- 替换公式中的列号(如C、D列)和数据范围,匹配你的实际表格结构
内容的提问来源于stack exchange,提问作者PHV
相关产品推荐
相关产品推荐

