mysql数据分组:创建分组

巴扎黑
巴扎黑 原创
2017-05-09 13:49:56 1746浏览

mysql数据分组

SQL聚集函数可用来汇总数据。这使我们能够对行进行计数,计算和与平均数,获得最大和最小值而不用检索所有数据。

目前为止的所有计算都是在表的所有数据或匹配特定的where子句的数据上进行的。提示一下,下面的例子返回供应商1003提供的产品数目:

输入:

select count(*) as mun_prods from products where vend_id = 1003;

输出:

QQ截图20170509101229.png

但如果要返回每个供应商提供的产品数目怎么办?或者返回只提供单项产品的供应商所提供的产品,或返回提供10个以上产品的供应商怎么办?

这就是分组显身手的时候了。分组允许把数据分为多个逻辑,以便能对每个组进行聚集计算。

mysql创建分组

分组是在select语句的group by子句中建立的。理解分组最好的办法是看下面这个例子:

输入:

select vend_id,count(*) as num_prods from products group by vend_id;

输出:

QQ截图20170509101240.png

分析:上面的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子句之前。

【相关推荐】

  1. mysql数据分组:过滤分组

  2. mysql数据分组和排序及SELECT子句顺序

以上就是mysql数据分组:创建分组的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。