- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL查询语言基本教程(2)
三、GROUP BY...语句??? GROUP BY... 语句实现纪录分组功能,它通常需要和上面我们提到过的统计函数 SUM、COUNT 等联合使用,它的语法为:
?SELECT column1[, column2] ?FROM table1[,table2] ?WHERE conditions ?GROUP BY column1[, column2]?ORDER BY column1[, column2]
范例四:计算学生成绩及总成绩??? 我们依然使用上一章使用的数据库 c:\db4.mdb,在其中加入一个名字为 db2 的表,表的结构以及数据如下:?字段名?学生?科目?成绩?张严?语文?86.5?李永?语文?93?王为?语文?91?张严?数学?96.5?李永?数学?90?王为?数学?87?张严?英语?80.5?李永?英语?94?王为?英语?98
??? 建立新工程,加入DAO定义库。在Form1中加入一个ListBox控件,然后在Form_load中加入以下代码:
Private Sub Form_Load()??? Dim rsTemp As Recordset??? Dim dbTemp As Database??? Dim astr As String??? ??? Set dbTemp = DBEngine(0).OpenDatabase(c:\db4.mdb, dbOpenSnapshot)??? astr = SELECT SUM(db2.成绩)AS rTotal, FORMAT((AVG(db2.成绩)),′###.#′) AS rAVG, _??????????? (db2.学生) AS Student FROM db2 GROUP BY db2.学生
??? Set rsTemp = dbTemp.OpenRecordset(astr)??? If rsTemp.RecordCount 0 Then??????? rsTemp.MoveFirst??????? Do Until rsTemp.EOF??????????? List1.AddItem rsTemp![Student] Chr(5) rsTemp![rTotal] _??????????????? ?????? rsTemp![rAVG]??????????? rsTemp.MoveNext??????? Loop??? End IfEnd Sub??? 在上面的代码中,我们利用GROUP BY将纪录根据学生姓名分组,再建立了两个统计字段rTotal和rAvg并分别利用统计函数SUM和AVG分别统计各个分组的总成绩以及平均成绩。要注意的是,在SELECT语句中出现的字段,如果没有包含在统计函数内的话,都要包含在GROUP BY子句中。??? 另外在上面的SQL查询中我们还使用了FORMAT子句,这是SQL中的转换和格式化语句中的一个,该语句的语法同VB中的Format语句是一样的,相似的语句还有FIX语句。需要注意的一点是,虽然在Microsoft JET Engine 中的SQL语法和ANSI决大部分是一样的,但是有一些还是保留了“微软特色”,特别是象这一类的转换和格式化语句,例如FORMAT就是ANSI中没有的。而象其它数据库,诸如oracle也有各自的SQL语法扩展。在使用不同数据库进行SQL查询时要注意这一点。??? 在GROUP BY 语句中还可以连接使用HAVING子句。该语句同GROUP BY的关系就如同WHERE子句同SELECT的关系类似,WHERE子语句为SELECT所选择的列设置条件,而HAVING子语句是给由GROUP BY创建的组设置条件。例如如果将上面的范例中的astr改变为如下的字符串:
astr = SELECT SUM(db2.成绩)AS rTotal, FORMAT((AVG(db2.成绩)),′###.#′) _??????????? AS rAVG, (db2.学生) AS Student FROM db2 GROUP BY db2.学生 _??????????? HAVING (AVG(db2.成绩))=90
则在List中就将只会列出平均成绩大于90分的学生的成绩和名字。
范例五:获得分数高于总平均分数的学生及科目??? 我们仍然使用上面建立的db2表。建立新工程,加入DAO定义库。在Form1中加入一个ListBox控件和一个Label控件然后在Form_load中加入以下代码:
Private Sub Form_Load()??? Dim
原创力文档


文档评论(0)