西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)西西教程數(shù)據(jù)庫(kù)教程 → SQL中 Group by、having、order by、Distinct 需要注意的事項(xiàng)

SQL中 Group by、having、order by、Distinct 需要注意的事項(xiàng)

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/10/29 10:16:52字體大。A-A+

作者:佚名點(diǎn)擊:47次評(píng)論:1次標(biāo)簽: SQL

  • 類型:數(shù)據(jù)庫(kù)類大。1.7M語(yǔ)言:英文 評(píng)分:6.6
  • 標(biāo)簽:
立即下載

直奔主題,如下SQL語(yǔ)句:

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' 無(wú)效。

having 子句中的每一個(gè)元素并不一定要出現(xiàn)在select列表中

如果把該語(yǔ)句寫成:

SELECT COUNT(*) AS COUNT,REQUEST,METHOD FROM REQUESTMETH GROUP BY 
REQUEST ORDER BY REQUEST

那么將報(bào):

選擇列表中的列 'REQUESTMETH.method' 無(wú)效,因?yàn)樵摿袥](méi)有包含在聚合函數(shù)或 GROUP BY 子句中。

注意:
1、使用GROUP BY 子句時(shí),SELECT 列表中的非匯總列必須為GROUP BY 列表中的項(xiàng)。
2、分組時(shí),所有的NULL值分為一組。
3、GROUP BY 列表中一般不允許出現(xiàn)復(fù)雜的表達(dá)試、顯示標(biāo)題以及SELECT列表中的位置標(biāo)號(hào)。

如:

SELECT REQUEST,METHOD, COUNT(*) AS COUNT FROM REQUESTMETH GROUP BY 
REQUEST,2 ORDER BY REQUEST  

錯(cuò)誤信息為:每個(gè) GROUP BY 表達(dá)式都必須包含至少一個(gè)列引用。

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é)果集同下面語(yǔ)句一樣

SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY COUNTS DESC 

--這樣是允許的,區(qū)別于HAVING,HAVING后不允許跟聚集函數(shù)的別名作為過(guò)濾條件

SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY METHOD

--這樣是錯(cuò)誤的:ORDER BY 子句中的列 "REQUESTMETH.method" 無(wú)效,因?yàn)樵摿袥](méi)有包含在聚合函數(shù)或 GROUP BY 子句中。


SELECT DISTINCT 中使用 ORDER BY注意事項(xiàng):

SELECT DISTINCT BOOKID FROM BOOK ORDER BY BOOKNAME

以上語(yǔ)句將報(bào):

--如果指定了SELECT DISTINCT,那么ORDER BY 子句中的項(xiàng)就必須出現(xiàn)在選擇列表中。

因?yàn)橐陨险Z(yǔ)句類似

SELECT BOOKID FROM BOOK GROUP BY BOOKID ORDER BY BOOKNAME

其實(shí)錯(cuò)誤信息也為:

--ORDER BY子句中的列"BOOK.BookName" 無(wú)效,因?yàn)樵摿袥](méi)有包含在聚合函數(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的語(yǔ)句其實(shí)完全可以等效的轉(zhuǎn)換為GROUP BY語(yǔ)句

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)