【Oracle数据库进阶】004.SQL基础查询_聚合、分组、过滤、排序
课 程 推 荐 我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库教程合集 👈👈 MySQL数据库教程:👉👉 MySQL数据库教程合集 👈👈 优 质 资 源 下 载 :👉👉 资源下载合集 👈👈 优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集 👈👈 .
SQL基础查询_聚合、分组、过滤、排序
- 聚合、分组、过滤、排序
- 聚合函数
- 分组
- 分组聚合(按分组进行统计)
- 聚合过滤
- 排序
- ==查询顺序==
- 课后练习
聚合、分组、过滤、排序
聚合函数
- 函数
求和:sum 平均:avg 最大:max 最小:min 统计:count -- 统计函数不会统计空值
分组
- 关键字
group by
- 一般分组不会单独使用,都是配合聚合函数一起使用
- 分组函数可以做到去重的效果,去重函数还有Distinct
分组聚合(按分组进行统计)
- 语法
select 分组字段,聚合函数(统计字段) from 表名 group by 分组字段
- 示例
// 统计各部门的平均工资 select deptno,avg(sal) from emp group by deptno;// 统计各部门的人员数量 select deptno,count(empno) from emp group by deptno;
- 注意:所有查询字段中,除了聚合函数统计的字段,其他的都必须在group by 分组中
聚合过滤
- 关键字
having
- 示例
select deptno,count(empno) from emp group by deptno having count(empno)>3;
排序
- 关键字
order by [asc/desc]
- 默认是正序asc,倒序必须写关键字desc
- 可以按多个字段进行排序
- 示例
select 字段1, 字段2, 字段3, ... from 表名 order by 字段1 asc, 字段2 desc, 字段3 asc
- 语法顺序
SELECT * FROM 表名WHERE 条件GROUP BY 字段HAVING 条件 ORDER BY 列名 [ASC/DESC]
查询顺序
- 查询顺序
1. FROM 2. WHERE 3. GROUP BY /聚合 4. HAVING 5. SELECT 6. ORDER BY
- 语法解析,为什么顺序是这样的?
1. FROM ——————— 先要确定从哪张表取数 2. WHERE ——————— 过滤掉不想要的数据 3. GROUP BY /聚合 ——— 对数据进行分组(聚合) 4. HAVING ——————— 分组之后过滤出自己需要的数据 5. SELECT ——————— 查出自己需要的字段 6. ORDER BY —————— 最后对数据进行排序
课后练习
- 建表语句
-- 销售订单表 DROP TABLE sales_order; -- 删除表 create table sales_order -- 表名不能超过 30个字符,字段名也不能超过30个字符 (order_id VARCHAR2(20), -- 订单编号product_name VARCHAR2(10), -- 产品名称product_category VARCHAR2(10), -- 产品类别amount NUMBER(10), -- 订单金额salesman VARCHAR2(10) -- 销售人 );-- 表注释 COMMENT ON TABLE sales_order IS '销售订单表';-- 字段注释 COMMENT ON COLUMN sales_order.order_id IS '订单编号'; COMMENT ON COLUMN sales_order.product_name IS '产品名称'; COMMENT ON COLUMN sales_order.product_category IS '产品类别'; COMMENT ON COLUMN sales_order.amount IS '订单金额'; COMMENT ON COLUMN sales_order.salesman IS '销售人';-- 插数据 insert into sales_order values('SO201804170001','电脑','3C',5000,'小明'); insert into sales_order values('SO201804170002','硬盘','3C',1000,'小明'); insert into sales_order values('SO201804170003','显卡','3C',2000,'小明'); insert into sales_order values('SO201804170004','鼠标','3C',30,'小黄'); insert into sales_order values('SO201804170005','键盘','3C',50,'小黄');insert into sales_order values('SO201804170006','衣服','服装',680,'小黄'); insert into sales_order values('SO201804170007','裤子','服装',350,'小黄'); insert into sales_order values('SO201804170008','帽子','服装',100,'小明'); insert into sales_order values('SO201804170009','鞋子','服装',990,'小明'); insert into sales_order values('SO201804170010','袜子','服装',22,'小胖');insert into sales_order values('SO201804170011','手表','首饰',8800,'小胖'); insert into sales_order values('SO201804170012','手镯','首饰',16800,'小胖'); insert into sales_order values('SO201804170013','钻戒','首饰',28000,'小胖'); insert into sales_order values('SO201804170014','项链','首饰',1680,'小明'); insert into sales_order values('SO201804170015','耳环','首饰',9999,'小明');commit;
- 练习题
- 求每个人销售总额是多少?
select s.salesman ,sum(s.amount) from sales_order s group by s.salesman;
- 求每类产品销售额是多少?
select s.product_name ,sum(s.amount) from sales_order s group by s.product_name;
- 求每个人每类产品分别销售额是多少?
select s.salesman,s.product_name ,sum(s.amount) from sales_order s group by s.salesman,s.product_name;
- 每个人的销售订单数是多少?
select s.salesman ,count(s.order_id) from sales_order s group by s.salesman;
- 销售总额超过20000的人
select s.salesman ,sum(s.amount) from sales_order s group by s.salesman having sum(s.amount)>20000;