聚合函数、子查询

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 聚合函数、子查询

第08章_聚合函数

实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对
一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值

1. 聚合函数介绍

什么是聚合函数

聚合函数作用于一组数据,并对一组数据返回一个值。

count和avg是不计算空值的
聚合函数类型
AVG()
SUM()
MAX()
MIN()
COUNT()

1.1 AVG和SUM函数

可以对数值型数据使用AVG SUM 函数。

SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';  

image.png

1.2 MIN和MAX函数

可以对任意数据类型的数据使用 MIN MAX 函数。

SELECT MIN(hire_date), MAX(hire_date)
FROM employees;

1.3 COUNT函数

COUNT(*)返回表中记录总数,适用于任意数据类型

SELECT COUNT(*)
FROM employees
WHERE department_id = 50;

image.png

COUNT(expr) 返回expr不为空的记录总数。

SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 50;

image.png


image.pngimage.png

1.4GROUP BY

一个列

image.png

2.2 使用多个列分组

image.png

image.png

过滤分组:HAVING子句
1. 行已经被分组。
2. 使用了聚合函数。
3. 满足HAVING 子句中条件的分组将被显示。
4. HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。

image.png

image.png

1.5HAVING

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

第08章_聚合函数练习题

#1.where子句可否使用组函数进行过滤?

No!

#2.查询公司员工工资的最大值,最小值,平均值,总和

SELECT MAX(salary), MIN(salary), AVG(salary), SUM(salary)
FROM employees;

#3.查询各job_id的员工工资的最大值,最小值,平均值,总和

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

#4.选择具有各个job_id的员工人数

SELECT job_id, COUNT(*)
FROM employees
GROUP BY job_id;

5.查询员工最高工资和最低工资的差距(DIFFERENCE

SELECT MAX(salary), MIN(salary), MAX(salary) - MIN(salary) DIFFERENCE
FROM employees;

6.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内

SELECT manager_id, MIN(salary)
FROM employees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary) > 6000;

7.查询所有部门的名字,location_id,员工数量和平均工资,并按平均工资降序

SELECT department_name, location_id, COUNT(employee_id), AVG(salary) avg_sal
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
GROUP BY department_name, location_id
ORDER BY avg_sal DESC;

8.查询每个工种、每个部门的部门名、工种名和最低工资

SELECT department_name,job_id,MIN(salary)
FROM departments d LEFT JOIN employees e
ON e.`department_id` = d.`department_id`
GROUP BY department_name,job_id

第09章_子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。
SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者
需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集
合)进行比较。

image.png

image.png

image.png

image.png


1.2 子查询的基本使用

子查询的基本语法结构:

image.png

image.png

子查询(内查询)在主查询之前一次执行完成。

子查询的结果被主查询(外查询)使用 。

注意事项

子查询要包含在括号内

将子查询放在比较条件的右侧

单行操作符对应单行子查询,多行操作符对应多行子查询

1.3 子查询的分类

分类方式1

我们按内查询的结果返回一条还是多条记录,将子查询分为 单行子查询 多行子查询

单行子查询

查询工资大于149号员工工资的员工的信息

image.png

题目:返回job_id141号员工相同,salary143号员工多的员工姓名,job_id和工资

image.png

image.png

题目:返回公司工资最少的员工的last_name,job_idsalary

select last_name,job_id,salary 
from employees 
where salary=(
select min(salary) 
from employees
);

image.png

image.png

image.png

image.png

image.png

image.png

image.png

多行子查询

3.1 多行比较操作符

image.png

3.2 代码示例

题目:返回其它job_id中比job_id‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary

image.png


相关子查询

如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件

关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为 关联子查询

相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

相关文章
|
8月前
|
关系型数据库 MySQL 数据库
MySQL查询聚合函数与分组查询
MySQL查询聚合函数与分组查询
|
SQL Oracle 关系型数据库
第8章_聚合函数
第8章_聚合函数
92 0
|
8月前
聚合函数使用详解
聚合函数使用详解
39 0
|
8月前
(头哥)多表查询与子查询
(头哥)多表查询与子查询
147 0
|
8月前
|
SQL
深入了解关联查询和子查询
深入了解关联查询和子查询
79 0
|
SQL 关系型数据库 MySQL
第9章_子查询
第9章_子查询
73 0
|
SQL 索引
相关子查询
相关子查询
243 0
联合查询和子查询
联合查询和子查询
|
SQL Oracle 关系型数据库
第08章_聚合函数
第08章_聚合函数
99 0
|
SQL 关系型数据库 MySQL
第09章_子查询
第09章_子查询
104 0