!
也想出现在这里? 联系我们
广告位
当前位置:首页>技术分享>网站运维>mysql中group by和having的用法

mysql中group by和having的用法

group by是mysql中用来对by后面的单个或者多个字段进行分组的语法,可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表,用法比较灵活,常常和where或者having一起用。

一、group by的语法:

1、一般语法

2、带有过滤条件having、wherer的用法

如果另外还有过滤条件的话,一般是where或者having,可以这样用:

注意:where 是先过滤,再分组;having 是分组后再过滤

Having子句(是对分组之后的数据进行过滤,所以使用having时必须用group by先分组),Having中的组函数可以不是select中的组函数

where子句和having子句都是用来筛选条件用的,不同的是,where子句只能对分组前的属性进行删选,而having子句只能对分组后的属性进行筛选。

3、group by经常会配合聚合函数一起用

比如常用的聚合函数:count() , sum() , avg() , max() , min(),可以这样用

4、select后面的字段必须包含在group by后面字段之内

select后有聚合函数例外:

二、group by的用法实例:

下表有六个字段,分别为id、name(姓名)、dept(部门)、salary(工资)、edlevel(等级)、hiredate(聘用日期)

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

根据上面的表,分别说一下group by的几个用法:

1、group by的基本用法:

列出各个部门最高薪水的结果,sql语句如下:

查询结果如下:
DEPT MAXIMUM
开发部 2500
设计部 2600
销售部 3500

这里就用到了聚合函数,max(salary)可以获取salary字段的最大值,根据部门字段dept进行分类,选出各个部门中salary的最大值。

列出每个部门的总的薪水

查询结果如下:
DEPT total
开发部 4500
设计部 7000
销售部 9600
将 WHERE 子句与 GROUP BY 子句一起使用,不过必须在GROUP BY子句之前指定 WHERE 子句,下面的例子也是一样的。

2、where group by的用法实例:

查询公司2010年入职的各个部门每个级别里的最高薪水

查询结果如下:
DEPT EDLEVEL MAXIMUM
设计部 4 2300
设计部 5 2600
销售部 5 3000
销售部 7 3500

GROUP BY子句对DEPT和EDLEVEL的每个唯一组合各返回一行。

3、group by having的用法实例:

列出有2个以上雇员的部门的最高和最低薪水:

查询结果如下:
DEPT MAXIMUM MINIMUM
设计部 2600 2100
销售部 3500 3000

HAVING COUNT(*) >2这个过滤条件会选出staff表里面DEPT字段出现次数超过2次的dept字段值。

列出雇员平均工资大于3000的部门的最高和最低薪水:

查询结果如下:
DEPT MAXIMUM MINIMUM
销售部 3500 3000

  • 一、group by的语法:
  • 二、group by的用法实例:

给TA打赏
共{{data.count}}人
人已打赏
网站运维

帝国CMS安装错误an Error in a future version of PHP

2022-10-11 19:18:10

网站运维

mysql清空、删除数据表的命令详解(mysql清空数据库表命令)

2022-10-11 19:18:46

声明 本站上的部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。无意侵害您的权益,请发送邮件至 admin@s9h.cn 或点击右侧 私信:少羽 反馈,我们将尽快处理。
0 条回复A文章作者M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索