在ADO使用SELECT語法三
作者:Eve Cole
更新時間:2009-05-30 19:54:33
接上一篇文章:
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將查詢的結果做依據[姓名] 和[科目] 統計,統計各個科目] 使用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,在使用者端使用瀏覽器,瀏覽執行的結果,顯示依據[姓名] 和[科目] 來統計[平均] 分數。
學會了嗎?