一、分组函数

功能:统计信息

分类:

  • 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. 机械革命z2安装ubuntu20

    为了性能买了个游戏本机械革命z2,但还是想用上linux,身为程序员习惯了linux的开发环境有点离不开.但是之前尝试安装deepin或者linux都失败了,一是N卡条件下安装过程和安装之后的显示有问 ...

  2. 一文带你走遍Git世界,教会你Git的使用

    @ 目录 这篇文章教会Git 1. Git是什么? 1.1 发展历程 1.2 Git是什么? 1.3 Git和SVN 2.Git有什么用? 2.1 代码合并 2.2 代码备份 2.3 代码还原 2.4 ...

  3. Go语言中的有缓冲channel和无缓冲channel区别

    Go语言中的有缓冲channel和无缓冲channel区别 结论 ch1:=make(chan int)// 无缓冲 ch2:=make(chan int,1)// 有缓冲 无缓冲: 当向ch1中存值 ...

  4. .NetCore使用Docker安装ElasticSearch、Kibana 记录日志

    前言 最近园子里看到一篇<.Net Core with 微服务 - Elastic APM> 的文章(主要用于对接口的调用链.性能进行监控),非常实用,这里讲解.NetCore将日志写入E ...

  5. 柔性数组(Redis源码学习)

    柔性数组(Redis源码学习) 1. 问题背景 在阅读Redis源码中的字符串有如下结构,在sizeof(struct sdshdr)得到结果为8,在后续内存申请和计算中也用到.其实在工作中有遇到过这 ...

  6. acwing 890. 能被整除的数

    #include<bits/stdc++.h> #define ll long long using namespace std; int m; int n,p[20]; int sum, ...

  7. 关于vector.size()的一些常见错误总结

    1. 问题引入 通过查看[https://www.cplusplus.com/reference/vector/vector/] 的vector.size()说明,即 member type defi ...

  8. 『心善渊』Selenium3.0基础 — 28、unittest中测试套件的使用

    目录 1.测试套件的作用 2.使用测试套件 (1)入门示例 (2)根据不同的条件加载测试用例(了解) (3)常用方式(推荐) 1.测试套件的作用 在我们实际工作,使用unittest框架会有两个问题: ...

  9. Macbook(M1版)的用户看过来,.net 6 Preview 6支持Apple Silicon for macOS

    本文由葡萄城技术团队翻译 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 我们很高兴发布.NET6预览的第6版,本次预览是倒数第二次预览了.在本次预览发布之 ...

  10. Java 给PDF签名时添加可信时间戳

    一.程序运行环境 编译环境:IntelliJ IDEA 所需测试文件:PDF..pfx数字证书及密钥.PDF Jar包(Free Spire.PDF for Java).签名图片(.png格式) 可信 ...