SQL聚集函数可用来汇总数据。这使我们能够对行进行计数,计算和与平均数,获得最大和最小值而不用检索所有数据。
目前为止的所有计算都是在表的所有数据或匹配特定的where子句的数据上进行的。提示一下,下面的例子返回供应商1003提供的产品数目:
输入:
select count(*) as mun_prods from products where vend_id = 1003;
输出:
但如果要返回每个供应商提供的产品数目怎么办?或者返回只提供单项产品的供应商所提供的产品,或返回提供10个以上产品的供应商怎么办?
这就是分组显身手的时候了。分组允许把数据分为多个逻辑,以便能对每个组进行聚集计算。
mysql创建分组
分组是在select语句的group by子句中建立的。理解分组最好的办法是看下面这个例子:
输入:
select vend_id,count(*) as num_prods from products group by vend_id;
输出:
分析:上面的select语句指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段(用count(*)函数建立)。group by 子句知识MySQL按vend_id排序并分组数据。这导致对每个vend_id而不是整个表计算num_prods一次。从输出中可以看到,供应商1001有3个产品,供应商1002有2个产品,供应商1003有7个产品,而供应商1005有2个产品。
因为使用了group by,就不必指定要计算和估值的每个组了。系统会自动完成。group by子句提示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。
在使用group by子句之前,需要知道一些重要的规定:
1.group by子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。
2.如果在group by子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
3.group by子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在select中使用表达式,则必须在group by子句中指定相同的表达式。不能使用别名。
4.除聚集计算语句外,select语句中的每个列都必须在group by子句中给出。
5.如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。
6.group by子句必须出现在where子句之后,order by子句之前。
【相关推荐】
以上就是mysql数据分组:创建分组的详细内容,更多请关注php中文网其它相关文章!
……