【OracleDB】 07 分组查询 & 分组函数
分组函数
分组函数作用于一组数据,并对一组数据返回一个值。

Oracle中分组函数的种类:
- 求平均值 AVG
- 计数记录数 COUNT
- 求最大值 MAX
- 求最小值 MIN
- 求和 SUM
- 求标准差? STDDEV
分组函数的语法公式:
SELECT [column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
AVG(平均值)和 SUM (合计)函数
对数值型数据使用AVG 和 SUM 函数。
SELECT
AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM
employees
WHERE
job_id LIKE '%REP%';
MIN(最小值)和 MAX(最大值)函数
对任意数据类型的数据使用 MIN 和 MAX 函数。
SELECT
MIN(hire_date), MAX(hire_date)
FROM
employees;
COUNT(计数)函数
COUNT(*) 返回表中记录总数,适用于任意数据类型。
SELECT COUNT(*)
FROM employees
WHERE department_id = 50;
COUNT(expr) 返回expr不为空的记录总数。
SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 50;
分组函数与空值
所有的分组函数都是忽略空值进行计算的
SELECT AVG(commission_pct)
FROM employees;
使用NVL函数去设置空值,可以被分组函数计算
SELECT AVG(NVL(commission_pct, 0))
FROM employees;
COUNT结合DISTINCT排除重复的计数
COUNT(DISTINCT expr)返回expr非空且不重复的记录总数
SELECT COUNT(DISTINCT department_id)
FROM employees;
分组函数: GROUP BY
求出EMPLOYEES表中各部门的平均工资
语法公式:
可以使用GROUP BY子句将表中的数据分成若干组
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
【明确:WHERE一定放在FROM后面】
在SELECT 列表中所有未包含在组函数中的列都应该包含 在 GROUP BY 子句中。
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;
包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;
对多个列进行分组
SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;
非法使用组函数
所有包含于SELECT 列表中,而未包含于组函数中的列都 必须包含于 GROUP BY 子句中。
SELECT department_id, COUNT(last_name)
FROM employees;
错误警告:
GROUP BY 子句中缺少列
ERROR at line 1:
ORA-00937: not a single-group group function
不能在 WHERE 子句中使用组函数。
可以在 HAVING 子句中使用组函数。
SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;
错误警告:
WHERE 子句中不能使用组函数
ERROR at line 3:
ORA-00934: group function is not allowed here
练习:
部门最高工资比 10000 高的部门
过滤分组: HAVING 子句
使用 HAVING 过滤分组:
1. 行已经被分组。
2. 使用了组函数。
3. 满足HAVING 子句中条件的分组将被显示。
语法公式:
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
案例:
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;
嵌套分组函数
查询各部门平均工资的最大值
SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;
【OracleDB】 07 分组查询 & 分组函数的更多相关文章
- SQL Server数据库————连接查询和分组查询
		
SQL Server数据库————连接查询和分组查询 分组查询 select 列from <表名> where …… group by 列 注意:跟order by一样group ...
 - Django聚合分组查询、常用字段
		
首先回顾sql中聚合和分组的概念: 如果没有分组,会把整张表作为一个大组,查询字段必须是聚合结果:如果有分组,分组之后,必须要使用聚合的结果作为having的条件. 聚合查询 聚合:aggregate ...
 - MongoDB之 分组查询
		
分组查询 可视化工具 https://robomongo.org pymongo from pymongo import MongoClient # 方式一: c = MongoClient(host ...
 - Django-model聚合查询与分组查询
		
Django-model聚合查询与分组查询 聚合函数包含:SUM AVG MIN MAX COUNT 聚合函数可以单独使用,不一定要和分组配合使用:不过聚合函数一般和group by 搭配使用 agg ...
 - python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
		
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...
 - (转)python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)
		
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...
 - Django的mode的分组查询和聚合查询和F查询和Q查询
		
1.聚合查询 # 聚合函数aggregate,求指定字段的最大值,最小值,平均值,和的值,方法如下 from django.db.models import Avg from django.db.mo ...
 - Django基础(5)  ----基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询
		
一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(mode ...
 - group by分组查询
		
有如下数据: 一个简单的分组查询的案例 按照部门编号deptno分组,统计每个部门的平均工资. select deptno,avg(sal) avgs from emp group by deptno ...
 - Django学习——分组查询、图书管理系统项目、wsgi, uwsgi, cgi, fastcgi
		
1 分组查询 # 分组查询 # 查询每一个出版社id,以及图书平均价格(单表) # 原生sql # select publish_id,avg(price) from app01_book group ...
 
随机推荐
- 知乎x-zse-96逆向分析
			
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...
 - react兄弟之间通信
			
写入组件 import React, { Component } from 'react'//下面二个就是兄弟关系的组件 import Cmp1 from '../Child/Cmp1' import ...
 - mac home目录下无法mkdir目录及文件的解决方法
			
主要参考以下几篇文章 https://www.cnblogs.com/zhangbao3/p/12600058.html https://www.v2ex.com/t/607387 https://w ...
 - kettle从入门到精通 第三十课  mysql 数据连接常用配置
			
1.我们平常用的最多的数据库就是mysql了,这里我以mysql为例说下数据库连接池配置.为啥要用连接池,因为数据库建立连接很费性能,所以就建立连接池(提前建立好一批连接)缓存起来提高性能.下图中my ...
 - 笔记本重装系统后重装OFFICE(预装的,赠送的)
			
笔记本重装系统后重装OFFICE(预装的,赠送的) 1.首先用edge打开bing搜索微软账号,谷歌浏览器也行就是登录微软账号多了一步 2.进去后点击服务和订阅那一栏,然后可以看到自己已购买的产品.再 ...
 - work05
			
第一题:分析以下需求,并用代码实现 手机类Phone 属性: 品牌brand 价格price 行为: 打电话call() 发短信sendMessage() 玩游戏playGame() 要求: 1.按照 ...
 - 何时/如何使用 std::enable_shared_from_this<T>?
			
要点回顾 继承自 std::enable_shared_from_this<T> 的类能够在其自身实例中通过 std::shared_from_this 方法创建一个指向自己的 std:: ...
 - discuz论坛个人空间自定义css样式
			
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` discuz论坛个人空间自定义css样式 日期:2020- ...
 - SpringBoot指标监控功能
			
SpringBoot指标监控功能 随时查看SpringBoot运行状态,将状态以josn格式返回 添加Actuator功能 Spring Boot Actuator可以帮助程序员监控和管理Spring ...
 - spring与设计模式之二单例模式
			
网络上都说ApplicationContext是单例,但看了原始代码,我认为应该是一个错误的表达. 我们来看Spring6.x中用springboot创建一个程序的时候默认的applicationCo ...