威尼斯www.9778.com-威尼斯正版官方网站

我们分组玩的游戏 还记得吗

日期:2020-02-07编辑作者:数据库
use Myschool--------------------上机练习1---------------------查询每个年级的总学时数,并按照升序排列select gradeid as 年级,sum(Classhour) from subjectgroup by gradeidorder by SUM(Classhour)--查询每个参加考试的学员的平均分select studentno as 学号,AVG(studentresult)from resultgroup by studentnoselect * from subject--查询每门课程的平均分,并按照将序排列select subjectid as 课程,AVG(studentresult) from resultgroup by subjectidorder by AVG(studentresult) desc--查询每个学生参加的所有考试的总分,并按照降序排列select studentno as 学号,SUM(studentresult) from resultgroup by studentnoorder by SUM(studentresult) desc---------上机练习2--------------------查询每学期学时超过50的课程数use myschoolselect gradeid as 年级,COUNT(subjectid) as 课程数 from subjectwhere classhour>50group by gradeid--查询课程表的所有信息select * from subject--查询每学期学生的平均年龄select * from studentselect gradeid as 年级,AVG(DATEDIFF(yy,birthday,getdate()))as 平均年龄 from studentgroup by gradeid--查询北京地区的每学期学生人数select gradeid as 年级,COUNT(1) as 人数 from studentwhere address like('%北京%')group by gradeid--查询参加考试的学生中,平均分及格的学生记录,并按照成绩降序排列select studentno,AVG(StudentResult) as 平均分from Resultgroup by StudentNohaving AVG(StudentResult)>=60order by 平均分 desc--查询成绩表中的所有信息select * from result--查询开始日期为2014年2月22日的课程的及格平均分select subjectid,AVG(studentresult) as 平均分from Resultwhere ExamDate>='2014-2-22' and ExamDate<'2014-2-23'group by SubjectIdhaving AVG(StudentResult)>=60--统计至少有一次不及格的学生学号和次数。select studentno,COUNT(1) as 次数from Resultwhere StudentResult<60group by StudentNo

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序 
2010-06-06 15:34 
使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。 
二、数据分组(group by ): 
select 列a,聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a 
group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组。 
三、使用having字句对分组后的结果进行筛选,语法和where差不多:having 条件表达式 
需要注意having和where的用法区别: 
1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。 
2.where肯定在group by 之前,即也在having之前。 
3.where后的条件表达式里不允许使用聚合函数,而having可以。 
四、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是: 
1.执行where xx对全表数据做筛选,返回第1个结果集。 2.针对第1个结果集使用group by分组,返回第2个结果集。 
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。 

 注意:  (1)where之后不能跟聚合函数

4.针对第3个结集执行having xx进行筛选,返回第4个结果集。 5.针对第4个结果集排序。 

           (2) having是对分组后的数据进行第二次筛选或者过滤,也就是说没有group by就没having


           (3)如果语句中有group by关键字,那么select后只能跟group by后出现的列,或者是聚合函数

Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。

 


SQL语句的书写顺序:                     执行顺序:

粗浅的理解的话,
SELECT的语法顺序就是起执行顺序

     select 列名或聚合函数              (4)投影结果

FROM 
WHERE (先过滤单表/视图/结果集,再JOIN)
GROUP BY
HAVING (WHERE过滤的是行,HAVING过滤的是组,所以在GROUP之后)
ORDER BY

     from 表名                              (1)定位到表

     where 条件                            (2)分组前的第一道过滤

     group by 列名                        (3)分组

     having 聚合函数或者分组后的列名(5)分组后的第二道过滤

     order by                                 (6)最后排序

 

本文由威尼斯www.9778.com发布于数据库,转载请注明出处:我们分组玩的游戏 还记得吗

关键词:

Atitit.sqlwhere条件表达式的原理attilax概括

Atitit.sql where条件表达式的原理  attilax概括     1. 数据查询接口sql api标准化1 2. Sql接口的问题2 2.1. 虽然sql是结构...

详细>>

数据库==数据查询功底

还好吗?几天不见,甚是思念呀!笑对人生,好好生活,快快乐乐的迎接我们的美好未来吧!       3.自增列不可以赋值 好...

详细>>

Hive HBase Integration 集成

官方文档:   1、在hive/lib目录下找到hive-hbase-handler-1.2.1.jar,并把该文件拷贝到hbase/lib目录下。 2、把hbase/lib目录下的...

详细>>

oracle存储过程、函数、序列、包

风度翩翩. 积累进程 1. 语法 create or replace procedure procedureName(seqName varchar2)is /*声明变量*/ n number(10); cursor cur is select ...

详细>>