在聚合查询中使用列 (Visual Database Tools)

适用于:SQL Server

创建聚合查询时,查询和视图设计器 做出某些假设,以便它可以构造有效的查询。 例如,如果要创建聚合查询并标记数据列以便输出,查询和视图设计器会自动将该列作为 GROUP BY 子句的一部分,以避免无意中在摘要中显示单个行的内容。

使用“分组依据”

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

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

    如果不希望特定列成为 GROUP BY 子句的一部分,则必须通过在“条件”窗格的“分组依据”列中选择其他选项来手动更改它。 但是,查询和视图设计器不会阻止你选择可能导致查询不运行的选项。

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

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

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

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

  • 如果 Group By 列包含除 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 子句的一部分。

另请参阅

汇总查询结果(Visual Database Tools)
排序和分组查询结果(Visual Database Tools)