Group by 使用

再开发中遇到的一些问题,简单的做个总结

1.Group by 语法

SELECT column-names
  FROM table-name
 WHERE condition
 GROUP BY column-names
 ORDER BY column-names

Group by必须出现在where条件后面和order by之前

2.Group by中出现在select条件中的非聚合表达式必须出现在Group by 条件后面;

这个很好理解,因为分组Group by必须确保分组是唯一的;

3.Group by 和having一起使用

having用于对Group by的分组进行过滤,举个例子,而where则对所有的行先做筛选;

员工表结构如下所示

  id  name  dept  salary  edlevel  	 hiredate 
  1    张三  开发部 2000     3             2009-10-11
  2    李四  开发部 2500     3             2009-10-01
  3    王五  设计部 2600     5  	        2010-10-02
  4    王六  设计部 2300     4 	  	2010-10-03
  5    马七  设计部 2100     4 		2010-10-06
  6    赵八  销售部 3000     5 		2010-10-05
  7    钱九  销售部 3100     7 		2010-10-07
  8    孙十  销售部 3500     7 		2010-10-06 

1>查找查找雇员数超过2个的部门的最高和最低薪水:

SELECT dept ,MAX(salary) AS MAXIMUM ,MIN(salary) AS MINIMUM  
FROM STAFF  
GROUP BY dept  
HAVING COUNT(*) > 2  
ORDER BY dept  

逻辑是先分组,分组之后再执行having中的条件,开发部有两个人,不满足要求,设计部和销售部都大于2,结果就返回这两个部门的最高和最低薪水;

2>查找雇员平均工资大于3000的部门的最高薪水和最低薪水

SELECT dept,MAX(salary) AS MAXIMUM,MIN(salary) AS MINIMUM  
FROM STAFF  
GROUP BY dept  
HAVING AVG(salary) > 3000  
ORDER BY dept  
执行逻辑:先分组,分组之后计算每组的平均工资,大于3000的,之后再求这组的max和min,之后返回


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值