文档章节

Group by使用

小橙子的曼曼
 小橙子的曼曼
发布于 01/16 08:58
字数 642
阅读 16
收藏 0

概述

GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类似Excel里面的透视表。
GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。

常用聚合函数

  • count() 计数
  • sum() 求和
  • avg() 平均数
  • max() 最大值
  • min() 最小值

语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

例子

接下来我们将通过例子进行理解:
我们现在有一张dept_emp表共四个字段,分别是emp_no(员工编号),dept_no(部门编号),from_date(起始时间),to_date(结束时间),记录了员工在某一部门所处时间段,to_date等于9999-01-01的表示目前还在职。

image.png

部门人数

我们现在想知道每个部门有多少名在职员工,步骤如下:

  1. 筛选在职员工 where to_date='9999-01-01';
  2. 对部门进行分组group by dept_no
  3. 对员工进行计数 count(emp_no)

完整语句如下:

SELECT
  dept_no as 部门,
  count( emp_no) as 人数
FROM
  dept_emp 
WHERE
  to_date = '9999-01-01' 
GROUP BY
  dept_no

结果

image.png

部门名称

我们上一步分组之后得到的结果是部门编号,下一步我们可以通过departments去关联出部门名称,语句如下:

SELECT
    ( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部门,
    count( de.emp_no ) AS 人数 
FROM
    dept_emp de 
WHERE
    de.to_date = '9999-01-01' 
GROUP BY
    de.dept_no

结果

image.png

HAVING

当然提到GROUP BY 我们就不得不提到HAVING,HAVING相当于条件筛选,但它与WHERE筛选不同,HAVING是对于GROUP BY对象进行筛选。
我们举个例子:
每个部门人数都有了,那如果我们想要进一步知道员工人数大于30000的部门是哪些,这个时候就得用到HAVING了。
语句如下:

SELECT
    ( SELECT d.dept_name FROM departments d WHERE de.dept_no = d.dept_no ) AS 部门,
    count( de.emp_no ) AS 人数 
FROM
    dept_emp de 
WHERE
    de.to_date = '9999-01-01' 
GROUP BY
    de.dept_no 
HAVING
    count( de.emp_no ) > 30000 

结果

image.png



作者:Awesome_Tang
链接:https://www.jianshu.com/p/8b135d373df1
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

© 著作权归作者所有

共有 人打赏支持
小橙子的曼曼
粉丝 3
博文 74
码字总数 85652
作品 0
兰州
私信 提问
group by 深入总结

一、不兼容的语法问题。 先看使用如下sql:SELECT count(),town FROM 结果会报错。从这里涉及到sql的一个原则:值的集合与一个行mysql认为是不兼容的。这里,count()的结果是一个值。而town列...

wangtaotao
2011/02/23
0
0
MYSQL中group_concat有长度限制!默认1024

MYSQL中group_concat有长度限制!默认1024 在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了, 其实MYSQL内部对这个是有设置的,...

风中帆
2016/05/19
348
0
配置并启动Mysql组复制集群的Primay Server

本文主要内容参考官方reference的内容。 一,在配置文件中添加组复制 server_id=1 #GTID模式打开。Global Transaction Identifier 全局事物标识 #一个GTID在一个服务器上只执行一次,避免重复...

arwoo
2017/05/22
0
0
GCD group在多个网络请求的响应之前就已经执行

使用GCD进行多文件下载时,我们可以很方便的使用dispatchgroup进行管理。但是碰到网络请求都发出去了,想等到他们都响应,在执行下一步操作,有时候会惊奇的发现dispatchgroupnotify()竟然在...

骊山语罢清宵半
2016/01/19
434
0
Linq使用Group By

1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:Linq使用Group By按CategoryID划分产品。 说明:from p in db.Products 表示从表中将产品......

天才小龙
2018/01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

饮酒驾车和醉酒驾车

根据国家质量监督检验检疫局发布的《车辆驾驶醉酒驾车的测试 人员血液、呼气酒精含量阈值与检验》(GB19522—2004)中规定,该规定指出,饮酒驾车是指车辆驾驶人员血液中的酒精含量大于或者等...

writeademo
12分钟前
0
0
【go工具】golang tag 之 gomodifytags

链接:gomodifytags原文链接 gomodifytags 是go工具,用来修改/更新struct字段的标签tag.使用gomodifytags可以很方便的update/add/delete struct的字段标签。你可以很方便的增加新的标签,更...

mickelfeng
13分钟前
0
0
为提升应用品质助力,绿标2.0检测项技术详解

为保证应用在不同机型都能以最优的状态运行,给用户带来更好的体验,安卓绿色联盟联合华为终端开放实验室,通过deveco(deveco.huawei.com)平台,为开发者提供了基于《安卓绿色联盟应用体验...

安卓绿色联盟
14分钟前
0
0
eclipse中SVN信息不显示

打开eclipse安装路径(假定安装在D盘):D:\eclipse\configuration 然后将org.eclipse.update文件夹删掉,重新启动eclipse

中小宇
14分钟前
0
0
微服务架构 SpringCloud(二)Eureka(服务注册和服务发现基础篇)

一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一。用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。Java springcl...

itcloud
14分钟前
4
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部