GROUP BY 与聚合函数 使用注意点

表的设计:

表里面的内容:

一:在不使用聚合函数的时候,group by 子句中必须包含所有的列,否则会报错,如下

select name,MON from [测试、] group by name

会报错:

在子句中加上所有的列的时候

select name,MON from [测试、] group by name,mon

这时候不报错,执行结果

此时虽然成功执行了,但是可以看出来group by在这里并没有发挥任何的作用,我们完全可以直接select而不用group by,所以,group by子句要配合聚合函数使用,并且,在配合聚合函数使用的时候,在group by子句中不要加上聚合函数处的列名(加入as了的话)

配合聚合函数使用了的情况:

select SUM(mon),name from [测试、] group by name

结果:

是我们想要的。

再如:

select MAX(ID),name from [测试、] group by name

结果:

也是我们想要的。

但是说如果这样的话:

select MAX(ID) as id,name from [测试、] group by name,id

得到的结果是:

很明显这不是我们想要的。

所以这时候在使用聚合函数的地方若是使用了as另外命名,请不要在group by子句后再加上那个令命名的名字,否则就和文章刚开始出现的情况一样

表的设计:

表里面的内容:

一:在不使用聚合函数的时候,group by 子句中必须包含所有的列,否则会报错,如下

select name,MON from [测试、] group by name

会报错:

在子句中加上所有的列的时候

select name,MON from [测试、] group by name,mon

这时候不报错,执行结果

此时虽然成功执行了,但是可以看出来group by在这里并没有发挥任何的作用,我们完全可以直接select而不用group by,所以,group by子句要配合聚合函数使用,并且,在配合聚合函数使用的时候,在group by子句中不要加上聚合函数处的列名(加入as了的话)

配合聚合函数使用了的情况:

select SUM(mon),name from [测试、] group by name

结果:

是我们想要的。

再如:

select MAX(ID),name from [测试、] group by name

结果:

也是我们想要的。

但是说如果这样的话:

select MAX(ID) as id,name from [测试、] group by name,id

得到的结果是:

很明显这不是我们想要的。

所以这时候在使用聚合函数的地方若是使用了as另外命名,请不要在group by子句后再加上那个令命名的名字,否则就和文章刚开始出现的情况一样

猜你喜欢

转载自www.cnblogs.com/jpfss/p/9187818.html