一、分组函数

功能:统计信息

分类:

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

特点

  1. 参数支持类型
函数 参数支持类型
sum avg 具有可加性的数据
max min 具有可比较性的数据
count 计数`非空的数据个数,都支持
  1. 都忽略null
  2. 可以搭配distinct使用

1. 各函数的简单使用

获取平均工资和工资总和:

SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;



SELECT  SUM(salary) 总工资, ROUND(AVG(salary),2) 平均工资, MIN(salary) 最低工资,
MAX(salary) 最高工资, COUNT(salary) 总数
FROM employees;

2. 搭配distinct的使用

SELECT	COUNT(DISTINCT job_id) AS 工种数量, COUNT(job_id)
FROM employees;

3. COUNT 统计行数

SELECT COUNT(*) FROM employees;

加入常量值1,相当于加入一列的常量值后统计个数

SELECT COUNT(1) FROM employees;

4. 和分组函数一同查询的字段要求是group by后的字段

SELECT AVG(salary),salary
FROM employees;#(×)

二、分组查询

SELECT 	xxx字段,分组函数	<--
FROM 表
[WHERE condition]
GROUP BY xxx字段 <-- 按xxx字段分组(相同值为一组)
[ORDER BY xx]

分组查询中,SELECT的字段需要和GROUP BY后的字段对应

实际执行流程:

  1. 按照xxx字段(或函数等)进行分组
  2. 对每个分组进行按分组函数进行特定的统计
  3. 返回每个组的统计结果

1. 简单应用

查询每个工种最高工资

SELECT 	 job_id, MAX(salary)
FROM employees
GROUP BY job_id;

统计每个位置(城市)的部门个数

SELECT 	 location_id, COUNT(1)
FROM departments
GROUP BY location_id;

2. 添加筛选条件

数据源 位置
分组前筛选 原始表 GROUP BY
分组后筛选 分组后的结果集 GROUP BY

① 分组前的筛选

统计各个上级的下属有奖金的员工的最高工资

SELECT 	 manager_id, MAX(salary)
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;

② 分组后的筛选

使用HAVING语句:

SELECT 	xxx字段,分组函数
FROM 表
[WHERE condition]
GROUP BY xxx字段
[ORDER BY xx]
HAVING xxx条件 <--在最后添加

查询哪个部门的员工个数>2

  1. 查询每个部门的员工个数
SELECT 		department_id, COUNT(1) AS cnt
FROM employees
GROUP BY department_id;
  1. 1的结果进行筛选(员工个数>2)
SELECT 		department_id, COUNT(1) AS cnt
FROM employees
GROUP BY department_id
HAVING cnt>2;

查询领导编号>102的,每个其手下员工的最低工资>5000,满足条件的领导的对应编号

SELECT 	 manager_id, MIN(salary) AS 手下员工最低工资
FROM employees
WHERE manager_id > 102
GROUP BY manager_id
HAVING MIN(salary) > 5000

3. 按表达式或函数分组

员工姓名的长度分组,查询每一组员工个数,筛选员工个数>5的有哪些

SELECT	LENGTH(last_name) as NameLength, COUNT(1) as cnt
FROM employees
GROUP BY NameLength
HAVING cnt > 5
ORDER BY NameLength

4. 按多个字段分组

查询每个(部门,工种)的员工的平均工资

SELECT CONCAT( "(", department_id, ", ", job_id,")" ), AVG(salary)
FROM employees
GROUP BY department_id, job_id;

添加排序和筛选:

SELECT	CONCAT( "(", department_id, ", ", job_id,")" ), AVG(salary)
FROM employees
WHERE department_id IS NOT NULL
GROUP BY department_id, job_id
HAVING AVG(salary)>10000
ORDER BY AVG(salary) DESC;

SQL语句(三)分组函数和分组查询的更多相关文章

  1. 2019-1-11 SQL语句汇总——聚合函数、分组、子查询及组合查询

  2. 逆袭之旅DAY14.东软实训.Oracle.多表连接、分组函数、子查询

    2018-07-10 08:29:55 思考应用场景 异常数据的测试 6.显示能挣得奖金的雇员的姓名.工资.奖金,并以工资和奖金降序排列.select ename,sal,commfrom empWH ...

  3. 常用sql语句总结(一)(查询)

    常用sql语句总结(一)(查询) 数据操作语句:DML 数据定义语句:DDL 数据控制语句:DCL (执行顺序------序号) 一.基本查询: 1. SELECT * ----- 2 FROM 数据 ...

  4. SQL 语句转换格式函数Cast、Convert 区别

    SQL 语句转换格式函数Cast.Convert CAST和CONVERT都经常被使用.特别提取出来作为一篇文章,方便查找. CAST.CONVERT都可以执行数据类型转换.在大部分情况下,两者执行同 ...

  5. SQL Server参数化SQL语句中的like和in查询的语法(C#)

    sql语句进行 like和in 参数化,按照正常的方式是无法实现的 我们一般的思维是: Like参数化查询:string sqlstmt = "select * from users whe ...

  6. Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数

    Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...

  7. SQL Server 基础 04 函数与分组查询数据

    函数与分组查询数据 系统函数分 聚合函数.数据类型转换函数.日期函数.数学函数 . . . 1. 聚合函数 主要是对一组值进行计算,然后返回一个值. 聚合函数包括 sum(求和).avg(求平均值). ...

  8. 数据库 数据库SQL语句三

    转换函数 to_char()字符串转换日期函数 --查询大于某个日期的员工信息 select * from emp where hiredate>to_date('1980-02-12','yy ...

  9. mybatis的sql语句导致索引失效,使得查询超时

    mybaitis书写sql需要特别注意where条件中的语句,否则将会导致索引失效,使得查询总是超时.如下语句会出现导致索引失效的情况: with test1 as (select count(C_F ...

随机推荐

  1. Linux基本命令精讲

    一.Shell Linux系统中运行的一种特殊程序 在用户和内核之间充当"翻译官 用户登录 Linux系统时,自动加载一个 Shell程序 Bash是 LinuxShell系统中默认使用的程 ...

  2. js笔记15

    DOM2动态创建节点 1.生成节点的方法 document.createElement("div") 2.插入节点的方法 父元素.appendChild(新节点) 在父节点的子节点 ...

  3. 春风十里不如你,全新Windows UI 3(WinUI 3) 的第一个实现Project Reunion 0.5

    什么是WinUI Windows UI库 (WinUI) 是适用于 Windows 桌面应用程序和 UWP 应用程序的本机用户体验 (UX) 框架. WinUI is a user interface ...

  4. JUnit5的Tag、Filter、Order、Lifecycle

    Tag JUnit5可以使用@Tag注解给测试类和测试方法打tag,这些tag能用来在执行时进行过滤,它跟group有点类似. tag应该遵循以下规则: 不能为null或者为空. 不能包含空格. 不能 ...

  5. 搭建Nexus3私服(含使用说明,支持CentOS、Windows)

    官方文档 Nexus仓库介绍(支持maven.yum.docker私服等) 仓库分为三种: proxy:是远程仓库的代理.比如说在nexus中配置了一个central repository的proxy ...

  6. namenode和datanode启动失败

    1.namenode启动失败,查看错误原因,是无法格式化,再看日志,根据日志提示,清空对应的目录,即可解决这个问题. 2.datanode启动失败: Can't open /var/run/cloud ...

  7. bugKu变量1

    重点:两个$$,这暗示着第二个$变量的值,作为第一个$的名称. 而且代码审计之后,发现只含有字母. 又暗示在变量中,那么猜想是在全局变量中,而php中全局变量是$GLOBALS.

  8. WPF教程六:理解WPF中的隧道路由和冒泡路由事件

    WPF中使用路由事件升级了传统应用开发中的事件,在WPF中使用路由事件能更好的处理事件相关的逻辑,我们从这篇开始整理事件的用法和什么是直接路由,什么是冒泡路由,以及什么是隧道路由. 事件最基本的用法 ...

  9. B站蹦了,关我A站什么事?

    昨天的大瓜,B站蹦了,大伙都跳起来分析了一波异常原因,着实给大伙的秋招准备了一波热乎乎的素材!在大家都在关注 B站的时候, 我大A站终于要站起来了!!!经过多方网友的极力引流,我A站也蹦了- 紧急通知 ...

  10. VMware Esxi开通SSH功能

    ESXi 5.5是直接安装在物理主机上的一个虚拟机系统,本质上是一个Linux系统.平时可以通过VMware Client端或者VMware vCenter进行管理,但对于一些特殊的VMware命令或 ...