sql计算单⾏数据字段空值⽐例_数据库基础学习——SQL语⾔
知识总结(4)
⼀、组函数(聚合函数)
1 组函数介绍
1.1什么是组函数
组函数操作⾏集,给出每组的结果。组函数不象单⾏函数,组函数对⾏的集合进⾏操作,对每组给出⼀个结果。这些集合可能是整个表或者是表分成的组。
1.2组函数与单⾏函数区别
单⾏函数对查询到每个结果集做处理,⽽组函数只对分组数据做处理。
单⾏函数对每个结果集返回⼀个结果,⽽组函数对每个分组返回⼀个结果。
1.3组函数的类型
· AVG 平均值
· COUNT 计数
· MAX 最⼤值
· MIN 最⼩值
· SUM 合计
1.4组函数的语法
1.5使⽤组函数的原则
· ⽤于函数的参数的数据类型可以是 CHAR、VARCHAR2、NUMBER 或 DATE。
· 所有组函数忽略空值。为了⽤⼀个值代替空值,⽤ NVL、NVL2 或 COALESCE 函数。
2 组函数的使⽤
2.1使⽤ AVG 和 SUM 函数
AVG(arg)函数:对分组数据做平均值运算。
arg:参数类型只能是数字类型。
SUM(arg)函数:对分组数据求和。
arg:参数类型只能是数字类型。
⽰例
求雇员表中的的平均薪⽔与薪⽔总额。
select avg(salary) ,sum(salary) from employees;
2.2 使⽤ MIN 和 MAX 函数
MIN(arg)函数:求分组中最⼩数据。
arg:参数类型可以是字符、数字、⽇期。
MAX(arg)函数:求分组中最⼤数据。
arg:参数类型可以是字符、数字、⽇期。
⽰例
求雇员表中的最⾼薪⽔与最低薪⽔。
select min(salary),max(salary) from employees;
2.3使⽤ COUNT 函数
COUNT 函数:返回⼀个表中的⾏数。
COUNT 函数有三种格式:
· COUNT(*) COUNT(expr) COUNT(DISTINCT expr)
COUNT(*)
返回表中满⾜ SELECT 语句标准的⾏数,包括重复⾏,包括有空值列的⾏。如果WHERE ⼦句包括在 SELECT 语句中,COUNT(*) 返回满⾜ WHERE ⼦句条件的⾏数。
COUNT(DISTINCT expr):
COUNT(DISTINCT expr)
使⽤ DISTINCT 关键字禁⽌计算在⼀列中的重复值。
⽰例
显⽰ EMPLOYEES 表中不重复的部门数。
select count(distinct department_id) from employees ;
3 创建数据组(GROUP BY)
3.1什么是创建数据组
可以根据需要将查询到的结果集信息划分为较⼩的组,⽤ GROUP BY ⼦句实现。
3.2 GROUP BY ⼦句语法
GROUP BY ⼦句:GROUP BY ⼦句可以把表中的⾏划分为组。然后可以⽤组函数返回每⼀组的摘要信息。
我们可以根据⾃⼰的需要对数据进⾏分组,在分组时,只要将需要做分组的列的列名添加到 GROUP BY ⼦句后侧就可以。GROUP BY 列不必在 SELECT 列表中。
3.3使⽤分组原则
· 如果在 SELECT ⼦句中包含了组函数,就不能选择单独的结果,除⾮单独的列出现在 GROUP BY ⼦句中。如果未能在 GROUP BY ⼦句中包含⼀个字段列表,你会收到⼀个错误信息。
· 使⽤ WHERE ⼦句,你可以在划分⾏成组以前过滤⾏。
· 在 GROUP BY ⼦句中必须包含列。
· 在 GROUP BY ⼦句中你不能⽤列别名。
· 默认情况下,⾏以包含在 GROUP BY 列表中的字段的升序排序。可以⽤ ORDER BY⼦句覆盖这个默认值。
3.4 GROUP BY ⼦句的执⾏顺序
先进⾏数据查询,在对数据进⾏分组,然后执⾏组函数。
3.5 Group by 注意点
· 在 SELECT 列表中的任何列必须在 GROUP BY ⼦句中。
· 在 GROUP BY ⼦句中的列或表达式不必在 SELECT 列表中。
3.6 约束分组结果
3.6.1什么是 HAVING ⼦句
HAVING 语句通常与 GROUP BY 语句联合使⽤,⽤来过滤由 GROUP BY 语句返回的记录集。
HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使⽤的不⾜。
HAVING ⼦句语法
⽰例
显⽰那些最⾼薪⽔⼤于 $10,000 的部门的部门号和最⾼薪⽔。
select e.department_id,max(e.salary) from employees e group by e.department_id having max(e.salary) > 10000;
⽰例
查询那些最⾼薪⽔⼤于 $10,000 的部门的部门号和平均薪⽔。
select e.department_id,avg(e.salary) from employees e group by e.department_id having max(e.salary) > 10000;
3.7 嵌套组函数
在使⽤组函数时我们也可以根据需要来做组函数的嵌套使⽤。
⽰例
显⽰部门中的最⼤平均薪⽔。
select max(avg(e.salary)) from employees e group by e.department_id;
⼆、⼦查询
1 ⼦查询介绍
1.1什么是⼦查询
⼦查询是⼀个 SELECT 语句,它是嵌在另⼀个 SELECT 语句中的⼦句。
可以⽤组合两个查询的⽅法解决这个问题,放置⼀个查询到另⼀个查询中。内查询或⼦查询返回⼀个值给外查询或主查询。使⽤⼀个⼦查询相当于执⾏两个连续查询并且⽤第⼀个查询的结果作为第⼆个查询的搜索值。
1.2⼦查询语法
· ⼦查询 (内查询) 在主查询之前执⾏⼀次
· ⼦查询的结果被⽤于主查询 (外查询)
可以将⼦查询放在许多的 SQL ⼦句中,包括:
·
WHERE ⼦句
· HAVING ⼦句
· FROM ⼦句
2 使⽤⼦查询
2.1使⽤⼦查询的原则
· ⼦查询放在圆括号中。
· 将⼦查询放在⽐较条件的右边。
· 在单⾏⼦查询中⽤单⾏运算符,在多⾏⼦查询中⽤多⾏运算符。
⽰例
谁的薪⽔⽐ Abel ⾼。⽤内连接实现:
select em.last_name,em.salary from employees abel,employees em where abel.last_name = 'Abel' and em.salary >abel.salary;
⽤⼦查询实现:sql中select是什么意思
select em.last_name,em.salary from employees em where em.salary >(select m.salary from employees m where m.last_name = 'Abel');
3 ⼦查询的类型
· 单⾏⼦查询:⼦查询语句只返回⼀⾏的查询
· 多⾏⼦查询:⼦查询语句返回多⾏的查询
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论