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

那些年我们一起做过的[分组查询]

日期:2020-02-07编辑作者:数据库

学习数据库那么长日子了,对与分组查询也终归有一点领会了,带我们一起来回看下大家的分组查询>>>

分组查询

在分组查询的选取中要尽量的施用前边的所学,

在SQL Server中采纳的分组查询是OCRUISERDEKuga BY子句,使用O路虎极光DER BY子句要同聚合函数协作使用手艺成就分组查询,在SELECT查询的字段中风流罗曼蒂克旦字段未有动用聚合函数就不得不出现在OPAJERODER BY子句中(即SELECT后面包车型客车字段名要么出以后聚合函数中,要么在OLANDDER BY子句中使用)

比方说丰硕的运用字符串函数,日期函数,数学函数,系统函数,以至大家的聚合函数.

应用group by实行分组查询
在运用group by关键字时,在select列表中得以钦定的种类是有限量的,select语句中仅许以下几项:
*被分组的列
*为各种分组再次来到贰个值得表明式,比方用二个列名作为参数的聚合函数

那正是说接下去就具体的来走访吧!

小心:group by 有一个标准,正是 select 后边的享有列中,未有运用聚合函数的列,必得出以往 group by 前面

幸存二个如此的数据库

HAVING子句与WHERE子句的分别

威尼斯正版官方网站 1

HAVING子句和WHERE子句的相像之处在于,它也定义寻觅条件。但与WHERE子句分裂,HAVING子句与组有关,并不是与单个的行有关。

具体表中有其重大列

1、如若钦赐了GROUP BY子句,那么HAVING子句定义的查究条件将功效于那个GROUP BY子句成立的那么些组。

接下去带大家来兑现率先个小功能:

2、假使钦点WHERE子句,而未有一点名GROUP BY子句,那么HAVING子句定义的探索条件将成效于WHERE子句的输出,并把那些输出看作是多个组。

1.查询每一种年级的总学时数,并依据升序排列

3、要是既未有一点名GROUP BY子句也未曾点名WHERE子句,那么HAVING子句定义的找出条件将成效于FROM子句的出口,并把那些输出看作是八个组。

select * from Subjectselect gradeid, sum(classhour) as 总学时数from Subjectgroup by GradeIdorder by sum(classhour)

4、在SELECT语句中,WHERE和HAVING子句的实行各种不相同。上边SELECT语句的实施步骤可以知道,WHERE子句只可以收到来自FROM子句的输入,而HAVING子句则足以接收来自GROUP BY子句、WHERE子句和FROM子句的输入。

2.询问每一种参预考试的学子的平分分

S-TQL语句实践顺序

select * from Resultselect studentno as 学员编号,AVG(studentresult) as 平均分from Result group by studentno

select         5:投影 ,映射为对应的列
from           1:定位到表
where          2:进行分组前的首先次筛选
group by      3:分组
having         4:对分组后的数据举行第一回筛选
order by      6:对映射出的结果开展排序

3.查每门课程的平分分,并依照降序排列

 

select * from Resultselect subjectid as 课程编号,AVG(studentResult) as 平均分from Resultgroup by SubjectIdorder by 平均分 desc 

只顾:where前面无法加聚合函数
     两个顺序:
     01where:对表中记录实行筛选(分组前)
威尼斯正版官方网站,     02group by 分组依附
     03having 对分组后的多少开展筛选
     见到having,在此以前必得有group by,因为having是对分组后的数目开展筛选
     三者使用各种不可舍本求末

4.询问各种学员参预的享有考试的总分,并遵照降序排列

eg:

select * from Resultselect studentno,sum(StudentResult) as 学员分数from Resultgroup by studentnoorder by 学员分数 desc 

myschool数据库中有四张表,分别为student(学子表卡塔尔国result(战表表卡塔尔国subject(科目表State of Qatargrade(年级表State of Qatar

 

01询问每一种年级的总学时数,并依据升序排列

ok,在知恋人了那样easy的小知识后,小编也不再藏着掖着了,接下去看看大家的刺客锏吧!

主题素材是每一个年级的总学时数,各个年级断定做为group by的分组依据,总学时则接纳sum(卡塔尔国函数

在那边大概提一下在写查询语句时索要专心的事项:

关于order by后也能够跟SUM(classhourState of Qatar.写总学时数的目标是为了更详尽的接头语句的实行顺序

只要语句中有group by关键字,那么select后只可以跟group by后边世的列,只怕是聚合函数

select gradeid as 年级编号,SUM(classhour) as 总学时数
from Subject
group by GradeId
order by 总学时数

1.询问每学期学时数当先50的学科数

02查询每种参预考试的学习者的平均分

select * from Subjectselect GradeId,COUNT(SubjectId) as 总时数 from Subjectwhere ClassHour>50group by GradeId

种种到场考试的上学的儿童平均分,学员对应学员编号确定为group by的分组依赖,平均分利用avg()函数总结出来

2.询问每学期学子的平均年龄

select studentno as 学员编号,AVG(studentresult) as 平均分
from Result
group by StudentNo
select * from Studentselect gradeid,AVG(DATEDIFF(YY,birthday,GETDATE())) as 平均年龄from Studentgroup by gradeid

 

3.询问新加坡地区的每学期人数

--03询问每门课程的平分分,并依据降序排列

select * from Studentselect gradeid,COUNT(1) as 总人数from studentwhere address like '%北京%'group by Gradeid

每门课的平分分,按降序排列,group by的分租依赖是subjectid(课程编号卡塔尔平均分则利用avg(卡塔尔(قطر‎函数总括出来

4.询问出席考试的学员中,平均分及格的学员记录(学号,平均分State of Qatar,依据降序排列

行使order by 平均分 desc 来拓展降序排列

select * from Resultselect studentno,AVG(StudentResult) as 平均分from Resultgroup by StudentNohaving AVG(StudentResult)>=60order by 平均分 desc
select subjectid as 课程编号 , SUM(studentresult) as 平均分
from Result
group by SubjectId
order by 平均分 desc

5.查询考试时间为贰零零玖-9-9学科的通过海关平均分

04询问每一种学子参预的享有考试的总分,并依据降序排列

select subjectid,AVG(studentresult) as 平均分from Resultwhere ExamDate>='2009-9-9' and ExamDate<'2009-9-10'group by SubjectIdhaving AVG(StudentResult)>=60

各样学子具备考试总分,按降序排列,group by的分组依靠是studentno(学子编号卡塔尔国,总分利用sum(卡塔尔(قطر‎函数进行测算

6.总计至少有一回不如格的上学的孩童学号和次数

最后选用order by总分desc来拓宽降序排序

select studentno,COUNT(1) as 次数from Resultwhere StudentResult<60group by StudentNo
select studentno as 学生编号 ,SUM(StudentResult) as 总分
from Result
group by StudentNo
order by 总分 desc

 

 
05查询每学期学时数超越50的学科数

 

每学期学时超越50的学科数,group by的分组依附是gradeid(年级编号卡塔尔国,现存一个范围规范学时不超过50,这里用where来界定他classhour>50

 

select * from Subject
select gradeid as 年级编号,COUNT(classhour) as 课程数
from Subject
where classhour>50
group by GradeId 

having字句的岗位不要记错了  

 

既然涉及了地方,在这里边又一定要说一下在说话的实践进程中字句的试行是有前后相继顺序的:

06查询每学期学子的平均年龄

威尼斯正版官方网站 2

每学期学生的平均年龄,group by的分组依靠是studentno(学子编号卡塔尔国,平均岁数用datediff(卡塔尔国进行管理得出年龄,用avg(卡塔尔(قطر‎在进展拍卖,得出平均年龄.

 

select studentno as 学生编号,AVG(DATEDIFF(yy,birthday,GETDATE())) as 平均年龄
from Student
group by StudentNo

07询问东方之珠地区的每学期学子人数

北京地区的每学期学生人数.group by的分组依赖是gradeid ,学子人数用count(studentno卡塔尔国得出学子人数,最后有个节制条件,只询问巴黎地区的,用where进行约束,address like '%东京(TokyoState of Qatar%'%象征专擅长度的字符.

select gradeid as 年级编号,COUNT(studentno) as 学生人数
from Student
where Address like '%北京%'
group by GradeId

 

08询问参与考试的学习者中平均分及格的学子记录,并依照成绩降序排列

加入考试的学员中平均分及格的学员记录,按降序排列,group by 分组依赖是studentno,平均分用av(studentresult卡塔尔(قطر‎实行测算出平均分,having举办判别avg(studentresult卡塔尔国>60是否过关,在用order by  平均分及格 desc进行降序排列.

select Studentno as 学生编号,AVG(Studentresult) as 平均分及格
from Result
group by StudentNo
having AVG(Studentresult)>=60
order by 平均分及格 desc

 

09询问考试日期为二〇一〇年九月9号的课程的合格平均分

试验日期为二〇一〇年六月9号的课程的合格平均分,group by 的分组依赖是课程编号,限制条件是调查日期为贰零零捌年6月9号

where ExamDate>='二〇〇九-9-9' and  ExamDate<'二零一零-9-10'.最终进行过滤及格平均分having avg(studentresult卡塔尔>=60.

select subjectid,AVG(studentresult) as 及格平均分
from Result
where ExamDate>='2009-9-9' and  ExamDate<'2009-9-10'
group by SubjectId
having AVG(StudentResult)>=60

 

10查询最少贰回考试不比格的学员学号,不如格次数

考试不如格的学子学号,不比格次数,先限定条件不比格的学员成绩,在依照学子学号进行分组,group by studentno

select studentno as 学生编号,COUNT(1) as 次数
from Result
where StudentResult<60
group by StudentNo

 多谢我们抽取宝贵的光阴来看,希望对您具有扶助,如若感觉写得还是能够的请帮忙,加关怀!如若有吗难点请发送到小编的信箱

18813091329@163.com

QQ:2991635691

本文由威尼斯www.9778.com发布于数据库,转载请注明出处:那些年我们一起做过的[分组查询]

关键词:

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

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

详细>>

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

use Myschool--------------------上机练习1---------------------查询每个年级的总学时数,并按照升序排列select gradeid as 年级,sum(C...

详细>>

数据库==数据查询功底

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

详细>>

Hive HBase Integration 集成

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

详细>>