`
fyd222
  • 浏览: 104034 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SQL基础-->分组与分组函数

 
阅读更多

--=================================

--SQL基础-->分组与分组函数

--=================================

/*

一、分组:

分组函数可以对行集进行操作,并且为每组给出一个结果。

使用group by column1column2,..columm1,column2进行分组,即column1,column2组合相同的值为一个组

二、常用分组函数: */

AVG([DISTINCT|ALL]n) -- 求平均值,忽略空值

COUNT({*|[DISTINCT|ALL]expr}) -- 统计个数,其中expr用来判定非空值(使用*计算所有选定行,包括重复行和带有空值的行)

MAX([DISTINCT|ALL]expr) -- 求最大值,忽略空值

MIN([DISTINCT|ALL]expr) -- 求最小值,忽略空值

SUM([DISTINCT|ALL]n) -- 求和,忽略空值

/*

三、分组函数语法:*/

SELECT [column,] group_function(column), ...

FROM table

[WHERE condition]

[GROUP BY column]

[ORDER BY column];

/*

四、分组函数使用准则:

DISTINCT 使函数只考虑非重复值,ALL则考虑包括重复值在内的所有值。默认为ALL

  带有expr参数的函数的数据类型可以为CHAR,VARCHAR2,NUMBER,DATE.

所有分组函数都忽略空值。可以使用NVL,NVL2,COALESCE函数代替空值

使用GROUP BY 时,Oralce服务器隐式地按照升序对结果集进行排序。可以使用ORDER BY 更改排序结果。

可以使用NVL 函数强制分组函数包含空值,如:*/

select avg(nvl(comm,0)) from emp;

/*

五、GROUP BY 子句的语法:

使用GROUP BY 子句可以将表中的行分成更小的组,然后使用分组函数返回每一组的汇总信息*/

SELECT column, group_function(column)

FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[ORDER BY column];

GROUP BY --group_by_expression 即为对哪些列进行分组

/*

六、GROUP BY 使用准则:

SELECT 中出现的列,如果未出现在分组函数中,则GROUP BY子句必须包含这些列

WHERE 子句可以某些行在分组之前排除在外

不能在GROUP BY 中使用列别名

默认情况下GROUP BY列表中的列按升序排列

GROUP BY 的列可以不出现在分组中

七、分组过滤:

使用having子句

having使用的情况:

行已经被分组

使用了组函数

满足having子句中条件的分组将被显示

八、演示:*/

--为数字数据使用AVGSUM方法

SQL> select min(sal) as min_sal,max(sal) as max_sal,

2 avg(sal) as avg_sal,sum(sal) as sum_sal

3 from scott.emp;

MIN_SAL MAX_SAL AVG_SAL SUM_SAL

---------- ---------- ---------- ----------

800 5000 2073.21429 29025

--对于数字,字符和日期数据类型,你能使用MINMAX方法

SQL> select min(hiredate) as min_hiredate,max(hiredate) as max_hiredate from scott.emp;

MIN_HIRED MAX_HIRED

--------- ---------

17-DEC-80 23-MAY-87

--使用count(*),count(expr),count(distinct expr)

--注意coung(*)包含空值、重复值,count(expr)过滤空值,count(distinct expr)即过滤空值,也过滤重复值

SQL> select count(*),count(mgr),count(distinct mgr) from emp;

COUNT(*) COUNT(MGR) COUNT(DISTINCTMGR)

---------- ---------- ------------------

14 13 6

--使用NVL 函数强制分组函数包含空值

SQL> select avg(comm) ,avg(nvl(comm,0)) from emp;

AVG(COMM) AVG(NVL(COMM,0))

---------- ----------------

550 157.142857

--使用group by 子句来分组

SQL> select job ,avg(sal) from emp group by job;

JOB AVG(SAL)

--------- ----------

CLERK 1037.5

SALESMAN 1400

PRESIDENT 5000

MANAGER 2758.33333

ANALYST 3000

--GROUP BY 的列可以不出现在分组中

SQL> select avg(sal) from emp group by job order by avg(sal) desc;

AVG(SAL)

----------

5000

3000

2758.33333

1400

1037.5

--错误的用法,SELECT 中的有些列没有在GROUP BY子句中出现

SQL> select job,avg(sal) from emp;

select job,avg(sal) from emp

*

ERROR at line 1:

ORA-00937: not a single-group group function

--使用having子句过滤分组结果

--查询平均工资高于的部门号,及其平均工资。

select deptno,avg(sal) from emp group by deptno

having avg(sal)>2000;

--查出平均工资在以上的工种(job)

select job,avg(sal) from emp group by job having avg(sal)>2000;

--求人数在人以上的部门

select deptno,count(*) from emp group by deptno having count(*)>5;

--使用分组函数的嵌套

SQL> select max(avg(sal)) from emp group by deptno;

MAX(AVG(SAL))

-------------

2916.66667

/*

九、更多 */

Oracle 数据库实例启动关闭过程

Oracle 10g SGA 的自动化管理

使用OEM,SQL*Plus,iSQL*Plus 管理Oracle实例

Oracle实例和Oracle数据库(Oracle体系结构)

SQL 基础-->常用函数

SQL基础-->过滤和排序

SQL 基础-->SELECT 查询

分享到:
评论

相关推荐

    sql server 2012 T-SQl基础教程 源码和示例数据库

    《SQL Server 2012 T-SQL基础教程——源码与示例数据库》 本教程专注于Microsoft SQL Server 2012中的Transact-SQL(T-SQL)语言,这是SQL Server的主要查询语言,用于数据操作、查询、存储过程和数据库对象的编程...

    Oracle11g SQL基础-实验手册

    分组函数通常与GROUP BY子句一起使用,用于对数据集进行分组并执行聚合计算。本章节讲解了COUNT、SUM、MIN、MAX、AVG等聚集函数的用法,以及如何使用GROUP BY和HAVING子句进行数据分组和条件筛选。 第6章 子查询 子...

    SQL基础教程-Mick-示例程序&习题答案

    本教程“SQL基础教程-Mick-示例程序&习题答案”由Mick编写,旨在为初学者提供一个实用的学习资源,帮助他们快速掌握SQL的核心概念和操作。 1. SQL基础知识: - 数据类型:SQL支持多种数据类型,如整数(INT)、...

    -分组函数&子查询

    通过上述知识点的深入解析,我们可以看到分组函数与子查询在SQL查询语言中的强大功能和灵活性,它们是进行复杂数据分析和报告生成的基础工具。熟练掌握这些技术对于任何数据库开发人员或数据分析师来说都是至关重要...

    SERVER SQL学习教程

    - **数据查询**:掌握SELECT语句,包括投影(SELECT)、选择(WHERE)、排序(ORDER BY)、分组(GROUP BY)和聚合函数(COUNT、SUM、AVG等)。 - **数据插入、更新和删除**:理解INSERT、UPDATE和DELETE语句的...

    Oracle11g SQL基础-实验手册.pdf

    Oracle11g SQL基础实验手册详细介绍了使用Oracle 11g数据库管理系统时,编写和执行基本SQL语句所需的各项技能。Oracle 11g是甲骨文公司推出的一个稳定的企业级数据库版本,支持大型事务处理和数据仓库应用。SQL是...

    learn-sql-the-hard-way-笨方法学sql

    1. **基础概念与术语**(learn-sql-the-hard-waych1.html) - SQL的全称及历史背景 - 数据库管理系统(DBMS)简介 - 关系型数据库基本概念 - 表、字段、记录、键等数据库元素 2. **查询语句SELECT**(learn-sql...

    sql学习-sql练习-SQL必知必会

    在IT行业中,SQL(Structured Query Language)是一种标准的语言,用于管理和处理关系数据库系统。...记住,理论知识与实践相结合是掌握任何技能的关键,因此,不断练习和应用所学是提高SQL技能的重要途径。

    sql---基本练习.rar

    这个压缩包"sql---基本练习.rar"显然包含了一些SQL基础练习,旨在帮助初学者掌握和巩固SQL的基本概念和操作。让我们详细探讨一下SQL的核心知识点: 1. 数据库与表: SQL主要用于操作数据库,其中数据库是由一张或...

    创意sql--------

    3. **联接艺术**:熟练掌握各种联接类型(如内联接、外联接、交叉联接)和联接条件是创意SQL的基础。有时,使用自联接可以解决多表间复杂的关联问题,或者使用`UNION ALL`和`UNION`来合并不同结果集。 4. **集合...

    sql2000-----chm

    通过深入学习和实践这些内容,你将能够熟练地在SQL Server 2000环境中进行数据管理,并为向更高版本的SQL Server或其他数据库系统迁移打下坚实基础。同时,CHM文件的使用也能提升你在日常工作中查找和解决问题的效率...

    Oracle数据库SQL基础-个人学习总结.pdf

    GROUP BY用于根据一个或多个列对数据进行分组,常与聚合函数(如COUNT、SUM、AVG、MAX、MIN)结合使用。 10. **程序块** PL/SQL是Oracle的面向对象的编程语言,程序块包括声明、执行和异常处理部分,用于编写更...

    ERP源码20110803

    2,将 库存管理->帐表->超储存货 与 库存管理->帐表->短缺存货 的功能合并为 库存管理->帐表->库存预警 3,将 存货核算->帐表->存货汇总表 改名为 存货核算->帐表->存货汇总 4,去除 存货核算->帐表->存货明细表 5,添加...

    三层ERP源代码

    2,将 库存管理->帐表->超储存货 与 库存管理->帐表->短缺存货 的功能合并为 库存管理->帐表->库存预警 3,将 存货核算->帐表->存货汇总表 改名为 存货核算->帐表->存货汇总 4,去除 存货核算->帐表->存货明细表 5,添加...

    SQL SERVER 2008 T-SQL 基础

    《SQL SERVER 2008 T-SQL基础》是一本由微软出版社出版的书籍,主要针对SQL Server 2008中的Transact-SQL(T-SQL)语言进行深入浅出的讲解。T-SQL是SQL Server的核心组件,用于数据查询、数据操纵、存储过程编写以及...

    精通SQL--结构化查询语言详解

    第1章 数据库与sql基础 1 1.1 数据库的基本概念 1 1.1.1 数据库的由来 1 1.1.2 数据库系统的概念 3 1.2 数据库系统的结构、组成及工作流程 3 1.2.1 数据库的体系结构 3 1.2.2 数据库系统的组成 4 1.2.3 ...

    SQL操作符和函数

    ### SQL操作符与函数详解 #### 一、SQL语法基础 **SQL**(Structured Query Language)是一种专门用于管理和处理关系型数据库的语言。它不仅用于检索数据,还支持数据更新、插入和删除等多种操作。 ##### 1. 数据库...

    [电子书] SQL Server 2012 T-SQL 实用技巧 (英文版)

    对于那些已经有一定SQL基础,但希望进一步提升自己在SQL Server 2012环境下解决问题能力的人来说,这是一本非常有价值的参考书。阅读《SQL Server 2012 T-SQL Recipes》的PDF文件,读者将有机会系统地探索这个强大的...

    经典SQL例子-scott

    在IT领域,SQL(Structured ...通过实践这些示例,你可以逐步提高SQL技能,为在数据库管理、数据分析或任何需要SQL技能的领域建立坚实的基础。记住,熟能生巧,不断地练习和应用这些例子,你将成为SQL的真正"神器"。

    SQL SERVER T-SQL

    - **排序与分组**:使用ORDER BY和GROUP BY子句对查询结果进行排序和分组,便于数据分析。 #### 四、高级查询技术 - **连接查询**:掌握不同类型的连接(INNER JOIN, LEFT JOIN, RIGHT JOIN等),以便从多个表中...

Global site tag (gtag.js) - Google Analytics