本章内容和大家分享的是数据当中的分组查询。分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在实际项目中的分组查询的使用也是比较多的,作为初学者来说,学好分组查询的姿势是十分有必要的!

分组查询概念

什么是分组查询:分组查询是按照一定的规则进行分组,分组以后数据会聚合,需要使用聚合函数,但是使用聚合函数不一定要分组,分组的关键字是group by。

首先,我们先来思考一下下面的sql语句的正确性:

---1.select * from t_student group by sex;     
---按照性别分组 男或者女 但是实际显示的是所有性别,*是所有 所以会报错,因为这种方式不是group by 表达式

查看结果:

---.select sex from t_student;
---这种方式最后显示的是所有的男女,也不是分组我们想要的 男 女 数据

查看结果:

---3.select t.studentid,t.sex from t_student t group by sex;  --6条id数据对应2条数据 不是group by表达式

查询结果:

---4.select sex from t_student group by sex;
---按照性别分组,只显示性别没有任何毛病--成功

查看结果:

我们看一下聚合函数的使用,聚合函数有count()  sum()  max()  min()  avg()  round()

--聚合函数
count() ---统计
sum() ---求和
max() ---最大值
min() ---最小值
avg() ---平均值
round() ---四舍五入函数

下面小编给大家演示一下关于这些聚合函数的基础操作,有助于我们后面的分组使用:

select max(age) from t_student;
--求年龄的最大值 select count(studentid) from t_student;
--求学生总数 select sum(studentid) from t_student;
--所有学生id的和 select min(studentid) from t_student;
--求学生id中的最小值 select avg(studentid) from t_student;
--求学生id的平均值

再议聚合函数:

select sex,sum(age) from t_student group by sex;
--以性别分组,显示性别中的男女年龄的之和

查看结果:

select sex,count(studentid) from t_student group by sex;
--以学生性别分组,显示男生和女生分别有多少?

查看结果:

select sex,max(age) from t_student group by sex;
--以性别分组,显示男生中年龄最大的和女生中年龄最大的。

查看结果:

ok,我们通过上面的例子来继续练习一下分组查询。

--统计706班男生,女生人数?

select sex,count(t2.studentid) from t_class t1,t_student t2 where t1.classid=t2.classid and t1.classid=
group by sex;

查询结果:

--查询826班男生、女生年龄的总和

select sex,sum(t2.age) from t_class t1,t_student t2 where t1.classid=t1.classid
and t1.classid= group by sex;

查看结果:

--查询每门课程的总分、最高分、最低分、平均分

--查询每门课程的总分、最高分、最低分、平均分
select t1.coursename 课程名字,max(t2.score)最高分,min(t2.score)最低分,avg(t2.score)平均分 from t_course t1,t_score t2 where t1.courseid=t2.courseid
group by t1.coursename;

查看结果:

--查询826班每位学生每门课程的总分、平均分、最高分、最低分

select t3.coursename 课程名字,t2.name 学生姓名,
sum(t4.score) 总分,
avg(t4.score) 平均分,
max(t4.score) 最高分,
min(t4.score) 最低分
from t_class t1, t_student t2, t_course t3, t_score t4
where t1.classid = t2.classid
and t2.studentid = t4.studentid
and t4.courseid = t3.courseid
and t1.classid =
group by t3.coursename,t2.name;

查看结果:

--查询每个学员的总分、平均分、最高分、最低分,只显示总分在250分以上的学员

敲笔记了哈:

1.where 使用在分组查询之前,where后面不能使用聚合函数

2.having 分组之后的过滤,having 紧跟group by ,有having 一定有group by ,但是有group by 不一定有having  

3.having 后面可以使用聚合函数 

--显示姓名
select t1.name 学生姓名,
sum(t2.score) 总分,
avg(t2.score) 平均分,
max(t2.score) 最高分,
min(t2.score) 最低分
from t_student t1, t_score t2
where t1.studentid = t2.studentid
group by t1.name having sum(t2.score)>;

查看结果:

另外的一种展示结果:

--不显示性名
select sum(t2.score) 总分,
avg(t2.score) 平均分,
max(t2.score) 最高分,
min(t2.score) 最低分
from t_student t1, t_score t2
where t1.studentid = t2.studentid
group by t1.studentid
having sum(t2.score) > ;

查询结果:

到此,分组查询我们就介绍到这里了。。。

oracle数据库之分组查询的更多相关文章

  1. Oracle数据库之分组查询及排序

    分组查询:使用 group by 来设置分组,把该列具有相同值的多条记录当成一组记录来处理,然后只会输出一条记录,得到的结果会默认使用升序的方式进行排列. 规则: (1)如果使用了分组函数,或者是 g ...

  2. oracle数据库之分组查询(转)

    本章内容和大家分享的是数据当中的分组查询.分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在 ...

  3. Oracle数据库之——分组查询,子查询及添加,更新,删除

    分组查询 写的顺序: select...from...where... group by...having...order by... 执行顺序: from...where...group by... ...

  4. Oracle和MySQL分组查询GROUP BY

    Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...

  5. ASP.NET操作ORACLE数据库之模糊查询

    ASP.NET操作ORACLE数据库之模糊查询 一.ASP.NET MVC利用OracleHelper辅助类操作ORACLE数据库 //连接Oracle数据库的连接字符串 string connect ...

  6. oracle数据库元数据SQL查询

    oracle数据库经典SQL查询 .查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from ...

  7. Oracle数据库的状态查询

    本文来源:huang_xw 的<Oracle数据库的状态查询> 1 状态查询 启动状态 SQL语句 结果 nomount select status from v$instance; ST ...

  8. Oracle数据库日期范围查询的两种实现方式

    参考文档:http://database.51cto.com/art/201108/288058.htm Oracle数据库日期范围查询有两种方式:to_char方式和to_date方式,接下来我们通 ...

  9. [转载]Oracle数据库基础--SQL查询经典例题

    Oracle基础练习题,采用Oracle数据库自带的表,适合初学者,其中包括了一些简单的查询,已经具有Oracle自身特点的单行函数的应用 本文使用的实例表结构与表的数据如下: emp员工表结构如下: ...

随机推荐

  1. subline自定义快捷键

    由于感觉原始subline的运行快捷键ctrl+b不是很方便,尝试修改,方法如下: 打开首选项 --> 快捷键设置 Key Bindings -Default //这个表示系统默认的快捷键.Ke ...

  2. Windows下通过Composer安装Yii2 [ 2.0 版本 ]

    安装好大于5.4或更高版本的PHP环境并开启openssl扩展.如果是Apache服务器,加载Apache的mod_ssl模块. 下载Composer并安装. 开始->运行[或者WIN+R]-& ...

  3. C语言中的printf函数的输入输出问题

    这个问题是个很基础,但是我一直不知道的问题,是同学问了之后才知道的,长知识了. 这里要注意的是,printf函数是从右向左计算,从左向右输出. 距离如下: #include <stdio.h&g ...

  4. 参数化防SQL注入

    private void AddStudent(){ string strName =txtName.Text.Trim(); string strPwd = txtPwd.Text.Trim(); ...

  5. his移植问题

    报错信息 权限不够未截图 注意修改uploads文件权限chmod 777 uploads 修改域名 参照dxtzy项目,sourcetree备注

  6. WM_COMMAND 和 WM_NOTIFY 的区别

    当我们按下一个菜单选项,或者一个控件需要通知父窗口一个事件发生(如鼠标单击.双击等),或者快捷键被按下时,Windows将会发送一个 WM_COMMAND 消息给父窗口.那么 WM_COMMAND 消 ...

  7. erlang使用心跳模式启动shell

    资料http://blog.yufeng.info/archives/2832 借鉴自从http://blog.csdn.net/mycwq/article/details/18306753 测试例子 ...

  8. iSCSI存储的3种连接方式

    我们分析了iSCSI存储的系统结构,下面来看iSCSI是如何与服务器.工作站等主机设备来连接的,也就是我们如何建立一个iSCSI网络存储系统. iSCSI设备的主机接口一般默认都是IP接口,可以直接与 ...

  9. 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能

    之前一直用Directshow技术采集摄像头数据,但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识,学习起来有一点点难度.最近发现很多人问怎么用FFmpeg采集摄像头图像,事实 ...

  10. pytest命令行选项

    -m 标记 代码加一个装饰器:@pytest.mark.run_bbc_test,命令行添加 -m run_bbc_test,执行带@pytest.mark.run_bbc_test的测试用例: -k ...