Group by分组用法

   Group是分组的意思,那加上by的话group by表示根据什么什么来进行分组。其作用就是根据by后面的规则将一个数据集分成若干区域段,每个区域段的值是相同的,然后再对每个区域的数据进行处理。

  对group by语句说明的时候,常常用到“每个XXX有多少(哪些)XXX

  

带有group bySQL语句的执行顺序

  如下一个简单的分组语句,以前的大学书上貌似也有这个例子,“每个部门都多少人,”那就要根据部门Id去基础表里面查询:select departmentID,count(*) ftrom basicDepartment  group by departmentID,这首先group by会对查询出来的数据进行分组,然后再计算每个组的人数。

  !!!如果句子是以下这样的:

  select departmentID,departmentName,count(*) ftrom basicDepartment  group by departmentID,查询结果中要增加一个部门名称的字段,但是group by 后面不变,那么会报错:“找不到departmentName这个字段”,原因是departmentName没有包含在group by的子句或者聚合函数中,具体原因可以参照网上别人讲解的,我觉得讲的挺好理解的:“如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。

出现的错误详解:咱们看看group by 的执行的过程,先执行select 的操作返回一个程序集,然后去执行分组的操作,这时候他将根据group by 后面的字段进行分组,并且将相同的字段并称一列数据,如果group by 后面没有这个字段的话就要分成好多的数据。但是分组就只能将相同的数据分成两列数据,而一列中又只能放入一个字段,所以那些没有进行分组的数据系统不知道将数据放入哪里,所以就出现此错误”。

  一种分组情况就只有一条记录,一个数据格是不能存放多个数据的,所以就需要通过一定的处理将多列的值转化成单值,然后将其放在对应的数据格中,完成这个步骤的就是聚合函数。

 

Group by group by all的区别

    通常,在SQL查询语句中都会有查询条件,以过滤掉不符合条件的记录,如果是wheregroup by的组合,那么where条件就会起作用,group在分组的会后不会把不符合条件的记录进去;如果是wheregroup by all的组合的话,where条件就会失效,group在统计的时候会把所有记录,不管符合条件与否,都一起统计进去。

  

猜你喜欢

转载自2540611109.iteye.com/blog/2360558