数据分析高级阅读约 15 分钟

掌握 Google Sheets QUERY 函数

在 Google Sheets 中解锁 SQL 式的数据操作。学习 QUERY 语法以过滤、排序、透视和聚合数据。

QUERY 函数是 Google Sheets 中最强大的数据操作工具——但大多数用户从未学习过它。如果你了解 SQL,QUERY 可以让你在电子表格公式中直接编写熟悉的 SELECT、WHERE、GROUP BY 和 ORDER BY 语句。如果你不了解 SQL,本指南将教你所需的一切。

QUERY 消除了对复杂嵌套公式、数据透视表和手动筛选的需求。单个 QUERY 公式可以替代 10 多个传统公式,使你的电子表格更快、更简洁、更易维护。这项技能将初级电子表格用户与专业分析师区分开来。

在本综合指南中,你将从基础到高级技巧学习 QUERY 语法。到最后,你将能够筛选数百万行、创建动态报表和构建自动化仪表板——所有这些都使用一个强大的函数完成。

开始前的准备

  • 具备 Google Sheets 的中级知识
  • 了解基本公式和单元格引用
  • 拥有至少 3 列的数据集进行练习(我们将提供示例)

分步指南

1

理解 QUERY 语法基础

学习 QUERY 公式的基本结构。

  • 基本语法:=QUERY(data, query, [headers])
  • data = 要查询的范围(A1:D100)
  • query = SQL 式的查询字符串("SELECT A, B WHERE C > 100")
  • headers = 可选的标题行数(通常为 1)
  • 列引用:使用字母(A、B、C)或 Col1、Col2、Col3
  • 示例:=QUERY(A1:D100, "SELECT A, B, C", 1)

Pro Tip

始终在数据范围中包含标题行。当列名在第一行时,QUERY 的效果最佳。
2

选择特定列

选择要在结果中显示的列。

  • 选择所有列:=QUERY(A1:D100, "SELECT *")
  • 选择特定列:=QUERY(A1:D100, "SELECT A, C, D")
  • 重新排列列:=QUERY(A1:D100, "SELECT D, A, B") 将 D 列放在首位
  • 使用 Col 符号:=QUERY(A1:D100, "SELECT Col1, Col3, Col4")
  • 使用 LABEL 重命名列:=QUERY(A1:D100, "SELECT A, B LABEL A '名称', B '收入'")

Pro Tip

当数据范围可能更改时,Col 符号(Col1、Col2)比字母更好——它会自动适应。
3

使用 WHERE 子句过滤数据

根据条件使用 WHERE 过滤行。

  • 基本筛选:=QUERY(A1:D100, "SELECT * WHERE B > 1000")
  • 文本筛选:=QUERY(A1:D100, "SELECT * WHERE A = '产品 A'")
  • 多个条件(AND):=QUERY(A1:D100, "SELECT * WHERE B > 1000 AND C < 5000")
  • 多个条件(OR):=QUERY(A1:D100, "SELECT * WHERE A = '产品 A' OR A = '产品 B'")
  • 文本包含:=QUERY(A1:D100, "SELECT * WHERE A CONTAINS '经理'")
  • 日期筛选:=QUERY(A1:D100, "SELECT * WHERE B > DATE '2024-01-01'")

Pro Tip

WHERE 子句中的文本值必须在双引号中使用单引号:"WHERE A = '文本'"
4

使用 ORDER BY 排序结果

按升序或降序对查询结果进行排序。

  • 升序排序:=QUERY(A1:D100, "SELECT * ORDER BY B")
  • 降序排序:=QUERY(A1:D100, "SELECT * ORDER BY B DESC")
  • 按多列排序:=QUERY(A1:D100, "SELECT * ORDER BY A ASC, B DESC")
  • 结合 WHERE 和 ORDER BY:=QUERY(A1:D100, "SELECT * WHERE C > 100 ORDER BY B DESC")
  • 按未在 SELECT 中的列排序:=QUERY(A1:D100, "SELECT A, B ORDER BY D DESC")

Pro Tip

子句的顺序很重要:SELECT、WHERE、GROUP BY、PIVOT、ORDER BY、LIMIT。遵循此顺序,否则查询会失败。
5

使用 GROUP BY 聚合数据

按类别汇总数据,如数据透视表。

  • 按类别求和:=QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A")
  • 按类别计数:=QUERY(A1:D100, "SELECT A, COUNT(B) GROUP BY A")
  • 按类别求平均值:=QUERY(A1:D100, "SELECT A, AVG(B) GROUP BY A")
  • 多个聚合:=QUERY(A1:D100, "SELECT A, SUM(B), AVG(C), COUNT(D) GROUP BY A")
  • 按多列分组:=QUERY(A1:D100, "SELECT A, B, SUM(C) GROUP BY A, B")
  • 添加 LABEL 以提高清晰度:=QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A LABEL SUM(B) '总收入'")

Pro Tip

使用 GROUP BY 时,SELECT 中的每一列要么必须在 GROUP BY 中,要么必须是聚合函数(SUM、AVG、COUNT 等)。
6

使用聚合函数

掌握 SUM、COUNT、AVG、MIN、MAX 进行数据分析。

  • SUM:=QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A") 对数值求和
  • COUNT:=QUERY(A1:D100, "SELECT A, COUNT(B) GROUP BY A") 计数非空单元格
  • AVG:=QUERY(A1:D100, "SELECT A, AVG(B) GROUP BY A") 计算平均值
  • MIN/MAX:=QUERY(A1:D100, "SELECT MIN(B), MAX(B)")
  • 组合函数:=QUERY(A1:D100, "SELECT A, SUM(B), AVG(C), COUNT(*) GROUP BY A")

Pro Tip

使用 COUNT(*) 计数所有行(包括空白),COUNT(B) 仅计数 B 列中的非空值。
7

限制和格式化结果

控制返回的行数并格式化输出。

  • 限制结果:=QUERY(A1:D100, "SELECT * ORDER BY B DESC LIMIT 10") 显示前 10 行
  • 使用 OFFSET 跳过行:=QUERY(A1:D100, "SELECT * LIMIT 10 OFFSET 5") 跳过前 5 行
  • 格式化数字:=QUERY(A1:D100, "SELECT A, B FORMAT B '$#,##0.00'")
  • 格式化日期:=QUERY(A1:D100, "SELECT A, B FORMAT B 'yyyy-mm-dd'")
  • 格式化百分比:=QUERY(A1:D100, "SELECT A, B FORMAT B '0.00%'")

Pro Tip

LIMIT 非常适合"前 10 项"报告。将其与 ORDER BY DESC 结合以首先获得最高值。
8

高级技巧和最佳实践

使用动态查询、PIVOT 和跨表查询。

  • 动态 WHERE 和单元格引用:=QUERY(A1:D100, "SELECT * WHERE B > "&E2) 使用 E2 中的值
  • 查询另一个工作表:=QUERY(Sheet2!A1:D100, "SELECT * WHERE B > 1000")
  • PIVOT 数据:=QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A PIVOT C")
  • 使用大括号组合多个查询:={QUERY(A1:D10, "SELECT *"); QUERY(A20:D30, "SELECT *")}
  • 处理错误:=IFERROR(QUERY(A1:D100, "SELECT * WHERE B > 1000"), "无结果")

Pro Tip

使用单元格引用构建动态查询时,要小心引号。文本需要:"WHERE A = '"&E2&"'"

总结

你现在已经掌握了 Google Sheets 中最强大的函数。从简单的 SELECT 语句到复杂的 GROUP BY 聚合和 PIVOT 表,你可以像 SQL 专家一样操作数据——所有这一切都在电子表格公式中进行。

但是,如果你发现自己反复编写复杂的 QUERY 公式,有一个更聪明的方法。ModelMonkey 可以使用简单的 AI 提示自动生成 QUERY 公式。不用记住语法和调试引号错误,只需告诉 ModelMonkey 你需要什么:

  • "按产品显示总收入,从高到低排序"
  • "筛选过去 30 天内销售额超过 1000 元的数据并按销售代表分组"
  • "创建按地区显示月度收入的数据透视表"

ModelMonkey 会编写 QUERY 公式、解释语法,甚至建议优化。它将数小时的试错转变为即时的、可用的公式。

准备好停止与 QUERY 语法搏斗了吗? 开始免费 14 天试用 并让 AI 为你编写公式。

常见问题

Google Sheets QUERY 函数是什么?

QUERY 是一个强大的函数,使用 SQL 式的语法来过滤、排序和聚合 Google Sheets 中的数据。语法:=QUERY(data, query, headers)。它支持 SELECT、WHERE、GROUP BY、ORDER BY、PIVOT 和 LIMIT 子句,使其比数据透视表或传统公式更灵活,适用于复杂的数据操作。

如何在 Google Sheets QUERY 中使用 WHERE?

WHERE 根据条件过滤行。语法:=QUERY(A1:D100, "SELECT * WHERE B > 1000")。对于文本,使用单引号:"WHERE A = '产品'"。使用 AND/OR 组合条件:"WHERE B > 1000 AND C < 5000"。使用 CONTAINS 进行部分匹配:"WHERE A CONTAINS '经理'"。

如何在 QUERY 中像数据透视表一样分组数据?

使用 GROUP BY 和聚合函数。语法:=QUERY(A1:D100, "SELECT A, SUM(B) GROUP BY A")。这将为 A 列中的每个唯一值对 B 列求和。SELECT 中的每一列必须在 GROUP BY 中或是一个聚合函数(SUM、AVG、COUNT、MIN、MAX)。添加 LABEL 以重命名结果列。

Google Sheets 中 QUERY 和 FILTER 有什么区别?

FILTER 返回匹配条件的行,但无法聚合、在公式中排序或选择特定列。QUERY 用 SQL 语法可以完成所有这些操作。对于简单的行筛选使用 FILTER,对于使用 WHERE、GROUP BY、ORDER BY 和聚合的复杂分析使用 QUERY。QUERY 更强大但学习曲线更陡峭。

如何使用单元格引用制作动态 QUERY 公式?

使用连接将单元格值插入查询字符串:=QUERY(A1:D100, "SELECT * WHERE B > "&E2)。对于文本值,添加引号:=QUERY(A1:D100, "SELECT * WHERE A = '"&E2&"'")。对于日期:"WHERE B > DATE '"&TEXT(E2, "yyyy-mm-dd")&"'""。动态查询在引用的单元格更改时自动更新。