the*_*van 14 sql sql-server group-by sql-server-2005 aggregate-functions
到目前为止,我已经编写了Aggregate函数,后跟Group By子句,以查找基于SUM,AVG和其他Aggregate函数的值.我在Group By子句中有点混乱.当我们使用Aggregate函数时,我需要在Group By子句中指定哪些列.否则是否有任何方法可以在不使用Group By子句的情况下使用聚合函数.
gbn*_*gbn 26
SELECT子句中没有聚合的所有列都需要在GROUP BY中
好:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3
Run Code Online (Sandbox Code Playgroud)
也不错:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, col5, col6
Run Code Online (Sandbox Code Playgroud)
没有其他列=不需要GROUP BY
SELECT MAX(col4)
...
Run Code Online (Sandbox Code Playgroud)
不会工作:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2
Run Code Online (Sandbox Code Playgroud)
无意义:
SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, MAX(col4)
Run Code Online (Sandbox Code Playgroud)
将聚合(MAX等)与没有GROUP BY的其他列放在一起是没有意义的,因为查询变得模糊不清.
Ant*_*ile 23
您可以在TSQL中使用Select AGG()OVER()
SELECT *,
SUM(Value) OVER()
FROM Table
Run Code Online (Sandbox Code Playgroud)
如果要分组,还有其他选项可用于分区:
SELECT *,
SUM(Value) OVER(PARTITION By ParentId)
FROM Table
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/ms189461.aspx
是的,您可以使用没有 GROUP BY 的聚合:
SELECT SUM(col) FROM tbl;
Run Code Online (Sandbox Code Playgroud)
这将仅返回一行 - tbl 中所有行的“col”列的总和(不包括空值)。