分组函数、子查询

开发工具与关键技术:Oracle、
作者:邓李庆
撰写时间:2019年04月01日
下面给大家讲一个分组函数。分组函数作用于一组数据,并对一组数据返回一个值。使用GROUP BY字句对数据分组。组函数类型AVG:是求数据的平均值。
COUNT:是计数函数。返回表中的记录总数,任何数据类型都可以计数。MIN:最小值,查询数据中的最小的那个值显示出来。MAX:最大值,查询数据中的最大的最大的那个值的显示出来。SUM:是合计,可以对数值类型的数据进行计算数据合计。见输出图1:
在这里插入图片描述
图1

在组函数中使用NVL函数会无法省略空值。在count中使用DISTINCT关键字返回expr非空且不重复记录总数。分组数据: 可以使用GROUP BY 将表中的数据分成若干组。Where一定放在form后面:
select AVG(commission_pct), commission_pct
from employees
GROUP BY commission_pct

过滤分组使用having过滤,行已经被分组使用组函数。满足having子句中条件分组将显示。
select AVG(commission_pct), commission_pct
from employees
GROUP BY commission_pct
HAVING max(commission_pct) > 1

嵌套组函数显示部门的平均工资的最大值把函数包含起来,从里面执行到外面。
SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;

查询出谁的工资高,使用子查询在主查询之前一次执行完成主查询出结果。
select *
from score
where cno = ‘3-105’ and degree > any(select degree from score where cno = ‘3-245’)

单行子查询使用单行比较操作符: = 、 > 、 >= 、 < 、 <= 、 <> 、
执行子查询:在员工表中查询出员工的工资,并计算应交税款:如果工资小于1000,税率为0,如果工资大于等于1000并小于2000,
–税率为10%,如果工资大于等于2000并小于3000,税率为15%,如果工资大于等于3000,税率为20%:
select salary,
case
when salary < 1000 then salary
when salary >= 1000 AND salary < 2000 then 1.10salary
when salary >= 2000 AND salary < 3000 then 1.15
salary
when salary >= 3000 then 1.20*salary
else salary END
from employees

非法使用子查询的例子:
SELECT employee_id,last_name
FROM employees
WHERE salary =(SELECT MIN(salary) FROM employees GROUP BY department_id);

查询出来的子查询中的空值问题:
SELECT last_name, job_id
FROM employees
WHERE job_id =(SELECT job_id FROM employees WHERE last_name = ‘Haas’)

多行子查询返回多行。多行使用的操作符:
IN :含义:等于列表中的任意一个。
ANY: 含义:和子查询返回的某一个值比较
ALL: 含义:和子查询返回的所有值比较
在多行子查询中使用ANY操作符。返回其他工资:
SELECT salary
FROM employees
WHERE salary < ANY (SELECT salary FROM employees WHERE salary = ‘9000’)

子查询中的空值问题:
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL窗口函数是一种用于对查询结果进行聚合、排序、极值、移动和切片等操作的函数。窗口函数有两种类型,一种是专用窗口函数,如rank、dense_rank、row_number等,用于对查询结果进行排序和编号。另一种是聚合函数,如sum、avg、count、max、min等,用于对查询结果进行聚合计算。\[1\] 子查询是一种在主查询使用的查询,用于返回主查询所需的数据或对检索数据进行进一步的限制。子查询的结果可以作为主查询的数据来源或判断条件。常见的子查询类型包括WHERE子查询、HAVING子查询、FROM子查询、SELECT子查询和EXISTS子查询子查询可以帮助我们在查询进行更复杂的条件判断和数据筛选。\[2\] 窗口函数与数据分组功能相似,都可以对数据进行统计分析。但窗口函数与数据分组有一些区别。窗口函数对每个组返回多行结果,而数据分组返回每个组的一行结果。窗口函数可以指定数据窗口的大小,并随着行的变化而变化,而数据分组是对所有数据进行统计。窗口函数的语法通常是在聚合函数后面使用over子句来指定分析函数工作的数据窗口,可以通过partition by子句指定用于分组的列名,通过order by子句指定用于排序的列名。\[3\] #### 引用[.reference_title] - *1* *2* *3* [SQL进阶,子查询与窗口函数](https://blog.csdn.net/junhongzhang/article/details/122974614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值