欢迎访问张朋的技术分享社区
当前位置: 首页 > 技术分享  > SQLSERVER

SQL中where, group by, having的用法和区别

2018/7/5 14:13:17 人评论

select DepartmentID as 部门名称,COUNT(*) as 个数 from BasicDepartment group by DepartmentID--这个就是使用了group by +字段 进行了分组,其中我们就可以理解为我们按照了部门的名称ID--DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少;--如…

select DepartmentID as '部门名称',COUNT(*) as '个数' from BasicDepartment group by DepartmentID

--这个就是使用了group by +字段 进行了分组,其中我们就可以理解为我们按照了部门的名称ID

--DepartmentID将数据集进行了分组;然后再进行各个组的统计数据分别有多少;

--如果不用count(*) 而用类似下面的语法

select DepartmentID,DepartmentName from BasicDepartment group by DepartmentID

--将会出现错误--选择列表中的列 'BasicDepartment.DepartmentName' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。    

这就是我们需要注意的一点,如果在返回集字段中,这些字段    

要么就要包含在Group By语句的后面,作为分组的依据;    

要么就要被包含在聚合函数中,作为分组的依据;

group by 和having 解释:前提必须了解sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 

having是分组(group by)后的筛选条件,分组后的数据组内再筛选 

where则是在分组前筛选 where子句中不能使用聚集函数,

而having子句中可以,所以在集合函数中加上了HAVING来起到测试查询结果是否符合条件的作用。 

即having子句的适用场景是可以使用聚合函数having 子句限制的是组,而不是行having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle <    

当同时含有 where 子句、group by 子句 、having 子句及聚集函数时,执行顺序如下: 执行where子句查找符合条件的数据; 使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组

显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。        

SELECT region, SUM(population), SUM(area)        

FROM bbc GROUP BY region 

HAVING SUM(area)>1000000        

在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。(where子句中不能使用聚集函数) 相反,HAVING子句可以让我们筛选成组后的各组数据



附件下载

相关技术

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?