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