首页 > Linux操作系统 > Linux操作系统 > group by使用详解
看完这篇文章,你就能了解为什么会产生这个错误了:
在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句。
group by 的作用就是对数据进行分组,比如有一个表记录销售状况的。有销售ID,产品ID,销售数量。那么如果我想查看某单销售记录总销售的数量。那么就需要用到group by了。
表的全部记录如下
|
销售ID |
产品ID | 销售数量 |
| 1 | 1 | 20 |
| 1 | 2 | 50 |
| 2 | 1 | 60 |
| 3 | 5 | 15 |
select 销售ID,SUM(销售数量) from 销售记录表 group by 销售ID
那么按产品ID分组,查看个产品的销售状况呢?
select 产品ID,SUM(销售数量) from 销售记录表 group by 销售ID
其它使用注意事项:
使用having为group by设置过滤条件。having的作用和select 的where作用大致相同。
having使用注意:
having只有与group by配合使用,才有效果,否则,有having 而无group by,那是没有意义的。
可以引用任何出现在选择列的列。记得,一定要出现的。
有having时,All无效。
示例:use northwind select productid,sum(quantity) as total_quantity from orderhist group by productid having sum(quantity)>30 go
按productid进行分组,并设置筛选条件:某类产品总量大于30,才被查找出来。
现在明白了having的用法,那么说说为什么产生开始说的错误吧。
group by 是专为聚合函数而设计的,如果在select选择列中没有出现聚合函数的列,而在group by子句中也没出现,那么,就会报开头说讲的错误。所以解决的办法就只有这样,要么把select中,没有进行聚合函数运算的列删除,要么在group by子句中加上该列。
再谈谈能够使用聚合函数的数据类型:
count能对所有类型使用,count(*)返回该表总记录条数。count(字段名)返回该字段非空值的总记录数。如果count(*)是30,但(产品介绍)字段有3个空值,那么count(产品介绍)返回27。
sum 和avg只能对数值类型进行运算,如int smallint tinyint decimal float real money smallmoney
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22168574/viewspace-666509/ ,如需转载,请注明出处,否则将追究法律责任。