直奔主題,如下SQL語句:
SELECT COUNT(*) AS COUNT,REQUEST,METHOD FROM REQUESTMETH GROUP BY REQUEST,METHOD HAVING (REQUEST ='FC.OCEAN.JOB.SERVER.CBIZOZBKHEADER' OR REQUEST='FC.Ocean.Job.Server.CBizOzDocHeader') AND COUNT(*) >3 ORDER BY REQUEST
注意事項(xiàng):
HAVING后的條件不能用別名COUNT>3 必須使用COUNT(*) >3,否則報(bào):列名 'COUNT' 無效。
having 子句中的每一個元素并不一定要出現(xiàn)在select列表中
如果把該語句寫成:
SELECT COUNT(*) AS COUNT,REQUEST,METHOD FROM REQUESTMETH GROUP BY REQUEST ORDER BY REQUEST
那么將報(bào):
選擇列表中的列 'REQUESTMETH.method' 無效,因?yàn)樵摿袥]有包含在聚合函數(shù)或 GROUP BY 子句中。
注意:
1、使用GROUP BY 子句時,SELECT 列表中的非匯總列必須為GROUP BY 列表中的項(xiàng)。
2、分組時,所有的NULL值分為一組。
3、GROUP BY 列表中一般不允許出現(xiàn)復(fù)雜的表達(dá)試、顯示標(biāo)題以及SELECT列表中的位置標(biāo)號。
如:
SELECT REQUEST,METHOD, COUNT(*) AS COUNT FROM REQUESTMETH GROUP BY REQUEST,2 ORDER BY REQUEST
錯誤信息為:每個 GROUP BY 表達(dá)式都必須包含至少一個列引用。
GROUP BY 中使用 ORDER BY注意事項(xiàng):
SELECT COUNT(*) AS COUNT FROM REQUESTMETH GROUP BY REQUEST,METHOD ORDER BY REQUEST,METHOD
--這樣是允許的, ORDER BY后面的字段包含在GROUP BY 子句中
SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY COUNT(*) DESC
--這樣是允許的,ORDER BY后面的字段包含在聚合函數(shù)中,結(jié)果集同下面語句一樣
SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY COUNTS DESC
--這樣是允許的,區(qū)別于HAVING,HAVING后不允許跟聚集函數(shù)的別名作為過濾條件
SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY METHOD
--這樣是錯誤的:ORDER BY 子句中的列 "REQUESTMETH.method" 無效,因?yàn)樵摿袥]有包含在聚合函數(shù)或 GROUP BY 子句中。
SELECT DISTINCT 中使用 ORDER BY注意事項(xiàng):
SELECT DISTINCT BOOKID FROM BOOK ORDER BY BOOKNAME
以上語句將報(bào):
--如果指定了SELECT DISTINCT,那么ORDER BY 子句中的項(xiàng)就必須出現(xiàn)在選擇列表中。
因?yàn)橐陨险Z句類似
SELECT BOOKID FROM BOOK GROUP BY BOOKID ORDER BY BOOKNAME
其實(shí)錯誤信息也為:
--ORDER BY子句中的列"BOOK.BookName" 無效,因?yàn)樵摿袥]有包含在聚合函數(shù)或GROUP BY 子句中。
應(yīng)該改為:
SELECT DISTINCT BOOKID,BOOKNAME FROM BOOK ORDER BY BOOKNAME
SELECT DISTINCT BOOKID,BOOKNAME FROM BOOK
SELECT BOOKID,BOOKNAME FROM BOOK GROUP BY BOOKID,BOOKNAME
以上兩句查詢結(jié)果是一致的,DISTINCT的語句其實(shí)完全可以等效的轉(zhuǎn)換為GROUP BY語句