在聚合查询中使用列

创建聚合查询时,查询和视图设计器工具进行某些假设以便可以构造有效的查询。 例如,如果正在创建聚合查询并将某个数据列标记为输出,则查询和视图设计器自动使该列成为 GROUP BY 子句的一部分,以便您不会无意中尝试显示汇总中个别行的内容。

使用“分组依据”

查询和视图设计器在处理列时使用下列原则:

  • 当选择“分组依据”选项或将聚合函数添加到查询中时,所有标记为输出或用于排序的列将自动添加到 GROUP BY 子句中。 如果列已经是聚合函数的一部分,则不会自动添加到 GROUP BY 子句中。

    如果不想使某特定列成为 GROUP BY 子句的一部分,必须在“条件”窗格的“分组依据”列中选择不同的选项以手动更改该设置。 然而,查询和视图设计器不会防止您选择可能产生无法运行的查询的选项。

  • 如果在“条件”窗格或“SQL”窗格中手动向聚合函数添加查询输出列,则查询和视图设计器不能自动从查询中移除其他输出列。 因此,必须从查询输出中移除剩余的列,或使它们成为 GROUP BY 子句或聚合函数的一部分。

向“条件”窗格的“筛选器”列中输入搜索条件时,查询和视图设计器遵循下列规则:

  • 如果没有显示网格的**“分组依据”**列(因为尚未指定聚合查询),则搜索条件将被放入 WHERE 子句中。

  • 如果已在聚合查询中,并在**“分组依据”列中选择了“Where”**选项,则搜索条件将被放入 WHERE 子句中。

  • 如果**“分组依据”列包含“Where”**以外的任何值,则搜索条件将被放入 HAVING 子句中。

使用 HAVING 和 WHERE 子句

下列原则描述如何在聚合查询的搜索条件中引用列。 一般情况下,可使用搜索条件中的某列筛选应汇总的行(WHERE 子句)或确定出现在最终输出中的分组结果(HAVING 子句)。

  • 个别数据列可以出现在 WHERE 子句或 HAVING 子句中,这取决于在查询中的其他地方使用它们的方式。

  • WHERE 子句用于选择行的子集以进行汇总和分组,因此在分组前应用 WHERE 子句。 所以,即使数据列不是 GROUP BY 子句的一部分或者不包含在聚合函数中,也可以在 WHERE 子句中使用它。 例如,下面的语句选择所有超过 10.00 美元的书并求其平均价格:

    SELECT AVG(price)
    FROM titles
    WHERE price > 10
    
  • 如果创建一个搜索条件,该条件涉及也用于 GROUP BY 子句或聚合函数中的一列,则该搜索条件可以作为 WHERE 子句或 HAVING 子句出现,您可以在创建条件时决定以哪一种形式出现。 例如,下面的语句创建每个出版商的书的平均价格,然后为平均价格超过 10.00 美元的出版商显示平均值:

    SELECT pub_id, AVG(price)
    FROM titles
    GROUP BY pub_id
    HAVING (AVG(price) > 10)
    
  • 如果在搜索条件中使用聚合函数,则条件将涉及汇总,因此必须是 HAVING 子句的一部分。

请参见

其他资源

汇总查询结果

对查询结果进行排序和分组