有关group by;

作为一个ORACLE数据库初学者,基本上都会经历的一个阶段,让人看到就想要吐的练习题,第一波,第二波,第三波......第n波

现在在网上也可以找到诸多波的答案,可是,我想说的是,复制答案,解决不了问题,不如大家来学会方法。在做题过程中,经常会遇到的一些问题:

不是group by 表达式;

非正常结束语句;

单行子查询返回多行;

等等.....诸多。

所以在这里给大家分享一些可以尽量避免这些问题的‘基础知识’。

分组函数概述
 分组函数是对数据行的集合进行操作并按组给出一个结果,这个结果可直接输出,或者用来做判断条件
分组函数的使用SELECT [column,] group_function(column)
FROM table
[WHERE condition]
[GROUP BY column]
[HAVING group_function(column)expression
[ORDER BY column|group_function(column)expression]
分组函数
MIN函数和MAX函数
 MIN([DISTINCT|ALL] column|expression):返回每组中的最小值
MAX([DISTINCT|ALL] column|expression):返回每组中的最大值
MIN和MAX函数可以用于任何数据类型-- 查询入职日期最早和最晚的日期
SELECT MIN(hiredate),MAX(hiredate)
FROM emp
SUM函数和AVG函数
 SUM([DISTINCT|ALL] column|expression):返回每组的总和
AVG([DISTINCT|ALL] column|expression):返回每组的平均值
SUM和AVG函数只能够对数值类型的列或表达式操作-- 查询职位以SALES开头的所有员工的平均工资、工资和
SELECT AVG(sal),SUM(sal)
FROM emp
WHERE job LIKE ‘SALES%‘
COUNT函数
 COUNT(*):返回表中满足条件的行记录数-- 查询部门30有多少个员工
SELECT COUNT(*)
FROM emp
WHERE deptno=30
COUNT([DISTINCT|ALL] column|expression):返回表中满足条件的非空行记录数-- 查询部门30有多少个员工领取奖金
SELECT COUNT(comm)
FROM emp
WHERE deptno=30
分组函数中的DISTINCT
 DISTINCT会消除重复记录后再使用组函数-- 查询有员工的部门数量
SELECT COUNT(DISTINCT deptno)
FROM emp
分组函数中的空值处理
 除了COUNT(*)之外,其他所有分组函数都会忽略列表中的空值,然后再进行计算-- 查询奖金的平均值
SELECT AVG(comm)
FROM emp
在分组函数中使用NVL函数可以使分组函数强制包含含有空值的记录-- 查询所有员工领取到的奖金的平均值
SELECT AVG(NVL(comm,0))
FROM emp
GROUP BY子句
创建数据组
 使用GROUP BY子句可将表中满足WHERE条件的记录按照指定的列划分成若干个小组,其中GROUP BY子句指定要分组的列-- 用GROUP BY子句创建数据组
SELECT column,group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column]
使用GROUP BY子句
 在SELECT列表中除了分组函数那些项,所有列都必须包含在GROUP BY子句中SELECT deptno,AVG(sal)
FROM emp
GROUP BY deptno
GROUP BY所指定的列并不是必须出现在SELECT列表中SELECT AVG(sal)
FROM emp
GROUP BY deptno
按多列分组的GROUP BY子句SELECT deptno,job,SUM(sal)
FROM emp
GROUP BY deptno,job
 HAVING子句
 ?不能在WHERE子句中限制组,要在HAVING子句中对数据组进行限制-- 用HAVNG子句限制数据组
SELECT column,group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column]
使用HAVING子句限制数据组SELECT deptno,MAX(sal)
FROM emp
GROUP BY deptno
HAVING MAX(sal)>2900
SELECT语句执行过程
 1.通过FROM子句中找到需要查询的表
2.通过WHERE子句进行非分组函数筛选判断
3.通过GROUP BY子句完成分组操作
4.通过HAVING子句完成组函数筛选操作
5.通过SELECT子句选择显示的列或表达式及组函数
6.通过ORDER BY子句进行排序操作
组函数的嵌套
 与单行函数不同,组函数只能嵌套两层SELECT MAX(AVG(sal))
FROM emp
GROUP BY deptno

还有什么问题的话可以到这里来留言,我们一起来探究问题奥!

时间: 2024-07-30 14:21:00

有关group by;的相关文章

djfhkjdahsg 将会对会计师公会斯蒂芬

http://f.dangdang.com/group/24690/7818358/ http://f.dangdang.com/group/24690/7818366/ http://f.dangdang.com/group/24690/7818410/ http://f.dangdang.com/group/24690/7818420/ http://f.dangdang.com/group/24690/7818408/ http://f.dangdang.com/group/24690/7

供应科顾客顾客顾客

http://f.dangdang.com/group/24554/3373214/http://f.dangdang.com/group/24554/3373218/http://f.dangdang.com/group/24554/3373222/http://f.dangdang.com/group/24554/3373227/http://f.dangdang.com/group/24554/3373230/http://f.dangdang.com/group/24554/337323

放假放假放假凤凰男

http://f.dangdang.com/group/24554/3373214/http://f.dangdang.com/group/24554/3373218/http://f.dangdang.com/group/24554/3373222/http://f.dangdang.com/group/24554/3373227/http://f.dangdang.com/group/24554/3373230/http://f.dangdang.com/group/24554/337323

passwd、shadow、group结构及各字段含义

/etc/password结构 sample:root:x:0:0:root:/root:/bin/bash 账号名称 密码 UID GID 用户信息说明 家目录 Shell root x 0 0 root /root /bin/bash /etc/shadow结构: sample:root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7::: 账号名称 密码 最近更动密码的日期 密码不可被更动的天(0代表随时可以变动) 密码需要重新变更的天

SQL Server Pivot 隐藏group

SQL Server行列转换隐藏group Pivot有一个隐藏的Group 分组, 除了Pivot column 和value列,其他列作为分组 Example: IF NOT EXISTS(SELECT * FROM sys.tables where name = 'Pivot_test') CREATE TABLE Pivot_test ( id1 int, id2 int, Pivot_column varchar(50), value char(50) ) insert into Pi

SQL group 分组查询

1.使用group by进行分组查询  在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:  被分组的列 为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数group by的使用在这只写几个例子吧:例: select courseID,avg(score) as 课程平均成绩 from score group by courseID 例: select studentID as 学员编号,courseID as 内部测试,a

【LeetCode】49. Group Anagrams

Given an array of strings, group anagrams together. For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"], Return: [ ["ate", "eat","tea"], ["nat",

32.GROUP BY

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name SQL GROUP BY 实例 我们拥有下面这个 "Or

mySQL之group By的简单分析

1.测试数据: create table `t_class` ( `id` bigint (11), `name` varchar (150), `age` int (11), `class` int (11) );  insert into `t_class` (`id`, `name`, `age`, `class`) values('1','tom1','22','1'); insert into `t_class` (`id`, `name`, `age`, `class`) value

sql篇 select from where group by having order by

以前,自己总是记不住如何用group by,如何用order by,什么时候用group by,什么时候用order by,什么时候两者一起用,怎么用,谁先谁后,现在,我们就一起来说一下Select   from   where   groupby   having   order by 的那些事,简单的总结一下,加深一下自己的印象,也给有需要的人提供点资源 Select   from   where   groupby   having   order by ,不用说,select from肯