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

如何用Google Query获取Google Sheets中每组的最频繁角色?

解决Google Sheets中按组查找出现次数最多角色的问题

原公式错误原因

你的公式出现解析错误主要有两个问题:

  1. SELECT与GROUP BY不匹配:GROUP BY A时,SELECT子句只能包含分组字段(A)或聚合函数,不能直接选择未分组的B列。
  2. 聚合函数嵌套不支持:Google Query不允许在HAVING子句中使用MAX(COUNT(B))这种嵌套聚合函数的写法。

正确实现方法

方法1:使用BYROW+QUERY组合公式

这个方法会自动遍历每个唯一组,统计该组下各角色的出现次数并返回次数最多的角色:

=BYROW(UNIQUE(A2:A), LAMBDA(group, {group, INDEX(QUERY(A1:B, "SELECT B, COUNT(B) WHERE A = '"&group&"' GROUP BY B ORDER BY COUNT(B) DESC LIMIT 1", 1), 2, 1)}))

公式解释:

  • UNIQUE(A2:A):提取A列所有不重复的组名(跳过表头)。
  • BYROW(..., LAMBDA(group, ...)):遍历每个组名,对单个组执行后续逻辑。
  • QUERY(A1:B, "SELECT B, COUNT(B) WHERE A = '"&group&"' GROUP BY B ORDER BY COUNT(B) DESC LIMIT 1", 1):针对当前组,统计各角色的出现次数,按次数降序排序后取第一条(即出现次数最多的角色)。
  • INDEX(..., 2, 1):从QUERY结果中提取角色名称(因为QUERY返回的是角色和次数两列,这里取第二行第一列,跳过表头)。

方法2:分步统计后筛选

如果需要先查看每个组-角色的详细计数,再提取结果,可以分两步操作:

  1. 先生成每个组-角色的计数表(放在空白列,比如D1):
=QUERY(A1:B, "SELECT A, B, COUNT(B) WHERE A IS NOT NULL GROUP BY A, B ORDER BY A, COUNT(B) DESC", 1)
  1. 再从计数表中筛选每个组的第一条记录(即次数最多的角色):
=QUERY(D:F, "SELECT D, E WHERE D <> '' GROUP BY D, E HAVING COUNT(D) = 1", 1)

注:这里假设第一步的结果放在D、E、F列(D=组名,E=角色,F=次数),需要根据实际位置调整列名。

处理多角色并列最多的情况

如果某个组有多个角色出现次数相同且都是最多,上述方法只会返回第一个角色。如果需要返回所有并列的角色,可以使用以下公式:

=BYROW(UNIQUE(A2:A), LAMBDA(group, 
  LET(
    counts, QUERY(A1:B, "SELECT B, COUNT(B) WHERE A = '"&group&"' GROUP BY B", 1),
    max_count, MAX(INDEX(counts, 2, 0)),
    top_roles, FILTER(INDEX(counts, 2, 0), INDEX(counts, 3, 0)=max_count),
    {group, TEXTJOIN(", ", TRUE, top_roles)}
  )
))

这个公式会把同一组中并列最多的角色用逗号分隔显示。

内容的提问来源于stack exchange,提问作者טל סבג

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:30:53