GROUP BY 与 Projection 子句之间的依赖

GROUP BY 子句限制 Projection 子句可指定的内容。如果您包括 GROUP BY 子句,则还必须在 GROUP BY 子句中引用 Projection 子句的选择列表中的每一 column

如果您在包括 GROUP BY 子句的查询的选择列表中指定聚集函数以及一个或多个列表达式,则必须包括在 GROUP 子句中用作聚集或时间表达式的一部分的所有列名称。

如果在 projection 子句中指定 OLAP 窗体函数,则在 GROUP BY 子句中还必须包括该 OLAP 窗体函数之内所有的列引用。

如果您在选择列表中为列声明别名,则可在 GROUP BY 子句中以那个别名代替该列名称,在 GROUP BY 子句中需要该列的名称或别名之一。

在 GROUP BY 列表中常量表达式和 BYTE 或 TEXT 列表达式不是有效的。

如果选择列表包括 BYTE 或 TEXT 列,则您不可使用 GROUP BY 子句。此外,您不可在 GROUP BY 子句中包括 ROWID。

如果选择列表包括用户定义的数据类型的列,则不可在 GROUP BY 子句中使用该列,除非该 UDT 可使用内建的 bit-hashing 函数。必须以 CANNOTHASH 修饰符创建不可使用该内建的 bit-hashing 函数的任何 UDT,其告诉数据库服务器不可在 GROUP BY 子句中使用该 UDT。

下列示例指定不在聚集表达式中的一列。 total_price 列不应在 GROUP BY 列表中,因为它是作为聚集函数的参数出现。COUNT 和 SUM 聚集被应用到每一组,而不是该查询的整个结果集。
SELECT order_num, COUNT(*), SUM(total_price)
        FROM items GROUP BY order_num; 
如果选择列表中的列表达式仅是列名称,则您必须在 GROUP BY 子句中使用它的名称或它的别名。如果通过算术运算符将列与另一列组合,则您可选择以两种方式中的一种来成组该查询结果集: