你用现实生活中的例子来理解一下就很明白啦:比如说你们班上的同学如果按性别来分组,可以分为两组,如果按照姓名来分组,那就基本上有多少个同学就有多少组(除非有同名同姓的),那如果按性别和姓名同时分组呢,那分的组就是同学数的两倍了,即“男的张三”一组,“女的张三”一组,“男的李四”一组,“女的李四”一组……当然,这其中有一半的组是空的,剩下的也是每一组只有一个人啊!理解没有?
所以 Group by 后面的分组字段不是随便加的,多个字段的分组是需要排列组合的,分的组数会按几何级数增长!
补充说一句:本来按名字来分组就是个愚不可及的想法了!更何况还要加上其他分组条件,这样的话基本上就是一组只有一个了!
求教,Mysql group by 后对分组数据的处理问题可直接用嵌套查询。 方法如下: 如数据: id name 1 a 1 b 2 c 2 d 3 e 3 f 3 g 3 h select count(t.counts) from(select id,count(*) counts from 表名 group by id) t这样得到的结果就是3。
如何分组数据,以便能汇总表内容的子集。这涉及两个新SELECT语句子句,分别是GROUP BY子句和HAVING子句。
分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。
分组是在SELECT语句的GROUP BY 子句中建立的。
来看例子理解:
mysql>select vend_id,COUNT(*) AS num_prods from products group by vend_id
也就是不同的Id的商品总数都能分别查出来。
除了能用GROUP BY分组数据外,Mysql还允许过滤分组,规定包括哪些分组,排除哪些分组。
也就是HAVING子句。
mysql>select cust_id,COUNT( /) AS orders from orders <u>GROUP BY</u>cust_id <u>HAVING</u>COUNT( /) >=2
注意:这里HAVING换成WHERE是不管用的。HAVING针对于分组。
WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
那么咱么看看怎么混合WHERE和HAVING。
mysql>select vend_id, COUNT( / ) AS num_prods from products <u>where prod_price>=10 group by</u>vend_id HAVING COUNT( /) >=2
mysql>select order_num,SUM(quantity*item_price) AS ordertotal
from orderitems
GROUP BY order_num
HAVING SUM(quantity*item_price) >=50
order by ordertotal
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)