SQL语句(三)分组函数和分组查询
一、分组函数
功能:统计信息
分类:
sum求和avg平均值max最大值min最小值count计算个数
特点
- 参数支持类型
| 函数 | 参数支持类型 |
|---|---|
sum avg |
具有可加性的数据 |
max min |
具有可比较性的数据 |
count |
计数`非空的数据个数,都支持 |
- 都忽略
null值 - 可以搭配
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后的字段对应
实际执行流程:
- 按照
xxx字段(或函数等)进行分组 - 对每个分组进行按分组函数进行特定的统计
- 返回每个组的统计结果
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
- 查询每个部门的员工个数
SELECT department_id, COUNT(1) AS cnt
FROM employees
GROUP BY department_id;
- 由
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语句(三)分组函数和分组查询的更多相关文章
- 2019-1-11 SQL语句汇总——聚合函数、分组、子查询及组合查询
- 逆袭之旅DAY14.东软实训.Oracle.多表连接、分组函数、子查询
2018-07-10 08:29:55 思考应用场景 异常数据的测试 6.显示能挣得奖金的雇员的姓名.工资.奖金,并以工资和奖金降序排列.select ename,sal,commfrom empWH ...
- 常用sql语句总结(一)(查询)
常用sql语句总结(一)(查询) 数据操作语句:DML 数据定义语句:DDL 数据控制语句:DCL (执行顺序------序号) 一.基本查询: 1. SELECT * ----- 2 FROM 数据 ...
- SQL 语句转换格式函数Cast、Convert 区别
SQL 语句转换格式函数Cast.Convert CAST和CONVERT都经常被使用.特别提取出来作为一篇文章,方便查找. CAST.CONVERT都可以执行数据类型转换.在大部分情况下,两者执行同 ...
- SQL Server参数化SQL语句中的like和in查询的语法(C#)
sql语句进行 like和in 参数化,按照正常的方式是无法实现的 我们一般的思维是: Like参数化查询:string sqlstmt = "select * from users whe ...
- Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数
Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...
- SQL Server 基础 04 函数与分组查询数据
函数与分组查询数据 系统函数分 聚合函数.数据类型转换函数.日期函数.数学函数 . . . 1. 聚合函数 主要是对一组值进行计算,然后返回一个值. 聚合函数包括 sum(求和).avg(求平均值). ...
- 数据库 数据库SQL语句三
转换函数 to_char()字符串转换日期函数 --查询大于某个日期的员工信息 select * from emp where hiredate>to_date('1980-02-12','yy ...
- mybatis的sql语句导致索引失效,使得查询超时
mybaitis书写sql需要特别注意where条件中的语句,否则将会导致索引失效,使得查询总是超时.如下语句会出现导致索引失效的情况: with test1 as (select count(C_F ...
随机推荐
- redis实现分布式锁天然的缺陷
redis分布式锁基本原理 采用 redis 实现分布式锁,主要是利用其单线程命令执行的特性,一般是 setnx, 只会有一个线程会执行成功,也就是只有一个线程能成功获取锁: 看着很完美 看看可能有什 ...
- Ubuntu18.04 LTS x64 构建ARM交叉编译环境(尝试,但失败了!!!估计是编译器没选对)
[测试而已,由于需要了解编译器和处理器体系,因此先放弃该方法] 动机 入门嵌入式开发,又需要 Windows 又需要 Linux,但资料给的竟然是 Ubuntu9,导致我不能使用 VSCode Rem ...
- 10、pfile和spfile文件详解
10.1.介绍: 1.Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件.它们是在数据库实例启动时候加载的, 决定了数据库的物理结构.内存.数据库的限制及系统大量的默认值.数据库 ...
- WEB与游戏开发的一些区别
WEB与游戏开发的一些区别 前言 最近由于在准备期末考,以及准备实习.其实都没好好写过博客,但今天由于个人身边的一些事,所以对做web和做游戏开发的区别做个记录,以下都是从网上搜索到的资料文章,感 ...
- AcWing 1293. 夏洛克和他的女朋友
夏洛克有了一个新女友(这太不像他了!). 情人节到了,他想送给女友一些珠宝当做礼物. 他买了n件珠宝,第i件的价值是i+1. 华生挑战夏洛克,让他给这些珠宝染色,使得一件珠宝的价格是另一件珠宝的价格的 ...
- 一千个不用 Null 的理由!
港真,Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判 ...
- 如何用jmeter监控内存,CPU(1)
要jmeter的运行环境配置好就可以: 打开这个小工具的步骤很简单,如果你已经配置好了Jmeter运行的环境,那么你也就不用去做其他的配置,直接 点击:开始-->运行-->输入cmd--& ...
- Leetcode No.88 Merge Sorted Array(c++实现)
1. 题目 1.1 英文题目 You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and ...
- 新旧图号(图幅号)转换/计算/检查,经纬度转换计算,C#代码
图号(图幅号):地图图号是指为便于使用和管理,按照一定方法将各分幅地图进行的编号. 经常用到图号,但是在网上一直没有找到一个完整的图号转换程序,因此自己写了一个图号处理的库,分享出来.如有错误请指正. ...
- 等了半年,m1芯片原生支持的.NET IDE出现了
m1芯片是苹果2020年发布的一款基于arm的桌面芯片,目前已经应用在MacBook Air .MacBook Pro.IMac.Ipad等设备上.可以说整个苹果生态圈都在去intel化. 今年年初跟 ...