是否可以在Select语句中使用Aggregate函数而不使用Group By子句?

时间:2011-06-24 11:38:16

标签: sql sql-server sql-server-2005 group-by aggregate-functions

到目前为止,我编写了Aggregate函数,后跟Group By子句,以查找基于SUM,AVG和其他Aggregate函数的值。我在Group By子句中有点混乱。 当我们使用Aggregate函数时,我需要在Group By子句中指定哪些列。 否则有没有办法在不使用Group By子句的情况下使用Aggregate函数。

7 个答案:

答案 0 :(得分:23)

SELECT子句中没有聚合的所有列都需要在GROUP BY

好:

SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3

也很好:

SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, col5, col6

没有其他列=没有需要GROUP BY

SELECT MAX(col4)
...

无效:

SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2

毫无意义:

SELECT col1, col2, col3, MAX(col4)
...
GROUP BY col1, col2, col3, MAX(col4)

将聚合(MAX等)与其他没有GROUP BY的列放在一起是没有意义的,因为查询变得模糊不清。

答案 1 :(得分:20)

您可以在TSQL中使用Select AGG()OVER()

SELECT *,
SUM(Value) OVER()
FROM Table

如果要分组,还有其他选项可用于分区:

SELECT *,
SUM(Value) OVER(PARTITION By ParentId)
FROM Table

http://msdn.microsoft.com/en-us/library/ms189461.aspx

答案 2 :(得分:3)

是的,您可以使用没有GROUP BY的聚合:

SELECT SUM(col) FROM tbl;

这将仅返回一行 - tbl中所有行的列“col”的总和(不包括空值)。

答案 3 :(得分:1)

您省略了SELECT内部聚合函数中的列,所有其他列应存在于以逗号分隔的GROUP BY子句中。

只要在SELECT语句中只有聚合值

,就可以使用聚合进行查询而不进行分组查询

答案 4 :(得分:1)

您必须按的列对其进行分组。

如果所选的所有列都应用了聚合函数,则可以避免使用group by子句。

答案 5 :(得分:0)

是的,没有聚合函数,我们可以按列分组,但这将是一个独特的函数。

select <column name> from <table name> group by <column name> 

给出表EMP

select * from EMP

输出:

7369    SMITH   CLERK       7902
7499    ALLEN   SALESMAN    7698
7521    WARD    SALESMAN    7698
7566    JONES   MANAGER     7839

添加group by

select job from EMP group by job

输出:

CLERK
SALESMAN
MANAGER

答案 6 :(得分:-1)

Aggregate函数中不存在的列应该是分组子句:

public View getView(int position, View convertView, ViewGroup parent) {
     View v = convertView;

        if (null == v) {
            v = LayoutInflater.from(getContext()).inflate(R.layout.activity_which_contain_my_button, parent, false);
    }else{
    //null Log 
    }
    return v;
}

然后我们不需要group by子句,但是如果Aggregate函数中没有某些列,则必须对该列使用group by。

Select 
Min(col1), 
Avg(col2), 
sum(col3) 
from table

按col1,col2分组

然后我们必须将group by用于列col1和col2