接上一篇文章:
order by
order by子句,可以设定排序的字段。
在一个sql表达式之中,order by子句通常放置于最后。
若要以递减顺序来进行排序(z~a,9 ~0),须于您要递减排序的每一字段的尾部加desc字。譬如:
select 姓名
from 员工
order by 工资 desc, 年龄
表示[工资] 字段以递减顺序来进行排序,[年龄] 字段以递增顺序来进行排序。
order by子句中排序的字段,不可以包含memo字段类型或ole对象类型,否则会发生错误。
在order by子句之中包含多个的字段时,首先以order by之后的第一个字段来进行排序。然后,若在此字段之中有相同的资料记录,才会以列第二字段来进行排序,依此类推。
group by
group by将查询的结果做统计,语法如下:
select fieldlist
from table
where criteria
[group by groupfieldlist]
使用where子句,可以设定不想要做统计的资料,而使用having子句可以筛选已经统计之后的字段。
不可以对memo字段类型或ole对象类型的字段做统计,否则会发生错误。
譬如asp程式rs22.asp如下,[select 种类, avg(价格) as 平均 from 产品 group by 种类] 使用group by将查询的结果做 [种类] 统计,统计各个种类统计来平均价格avg(价格):
<%
set conn1 = server.createobject("adodb.connection")
conn1.open "dbq=" & server.mappath("ntopsamp.mdb") & ";driver={microsoft access driver (*.mdb)};driverid=25;fil=ms access;"
set rs2 = server.createobject("adodb.recordset")
sqlstr = "select 种类, avg(价格) as 平均 from 产品 group by 种类"
response.write "<p>avg(价格)"
rs2.open sqlstr,conn1,1,1
do while not rs2.eof
response.write "<br>" & rs2("种类") & ": " & rs2("平均")
rs2.movenext
loop
rs2.close %>
以上的 asp程式rs22.asp,用户端使用浏览器,浏览执行的结果,显示依据 [种类] 统计来统计平均价格。
让我们多看个例子,譬如asp程式rs22.asp如下,[select 种类, sum(数量*价格) as 总计 from 产品 group by 种类] 使用group by将查询的结果做 [种类] 统计,统计各个种类的数量与价格相乘的总价sum(数量*价格):
<%
set conn1 = server.createobject("adodb.connection")
conn1.open "dbq=" & server.mappath("ntopsamp.mdb") & ";driver={microsoft access driver (*.mdb)};driverid=25;fil=ms access;"
set rs2 = server.createobject("adodb.recordset")
sqlstr = "select 种类, sum(数量*价格) as 总计 from 产品 group by 种类"
rs2.open sqlstr,conn1,1,1
response.write "<p>sum(数量*价格)"
do while not rs2.eof
response.write "<br>" & rs2("种类") & ": " & rs2("总计")
rs2.movenext
loop
rs2.close %>
以上的 asp程式rs22.asp,在用户端使用浏览器,浏览执行的结果,显示依据 [种类] 来统计总价。
groupfieldlist为用以统计的字段名称,最多为10个字段。
在groupfieldlist中字段名称的顺序,将决定统计层次,由最高至最低的层次来分组。
最后,譬如asp程式rs22.asp如下,[select 姓名,科目,avg(分数) as 平均 from 考试 group by 姓名,科目] 使用group by将查询的结果做依据 [姓名] 和 [科目] 统计,统计各个统计的 [平均] 分数avg(分数):
<%
set conn1 = server.createobject("adodb.connection")
conn1.open "dbq=" & server.mappath("ntopsamp.mdb") & ";driver={microsoft access driver (*.mdb)};driverid=25;fil=ms access;"
set rs2 = server.createobject("adodb.recordset")
sqlstr = "select 姓名,科目,avg(分数) as 平均 from 考试 group by 姓名,科目"
rs2.open sqlstr,conn1,1,1
response.write "<p>group by 姓名,科目"
do while not rs2.eof
response.write "<br>" & rs2("姓名") & " " & rs2("科目") & " 平均: " & rs2("平均")
rs2.movenext
loop
rs2.close
%>
以上的 asp程式rs22.asp,在用户端使用浏览器,浏览执行的结果,显示依据 [姓名] 和 [科目] 来统计 [平均] 分数。
学会了吗?
