明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

SQL語句中 Group by, having ,order by, Distinct 寫法需要注意的事項

[摘要]軟件等級:更新時間:2016-11-11版本號:v5.7.10 MySQL Server x64官方正式版免費下載立即下載SQL語句中 Group by, having ,order b...
MySQL Server x64官方正式版免費下載

軟件等級:

更新時間:2016-11-11

版本號:v5.7.10

MySQL Server x64官方正式版免費下載

SQL語句中 Group by, having ,order by, Distinct 寫法需要注意的事項

Group by, having ,order by, Distinct 是我們日常寫sql 語句頻率使用比較高的語句,這些語句都是比較耗性能的語句,在能不使用盡量不要使用,

 

 

SELECT DISTINCT 中使用 ORDER BY注意事項:

SELECT DISTINCT BOOKID FROM BOOK ORDER BY BOOKNAME

以上語句將報:

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

因為以上語句類似

SELECT BOOKID FROM BOOK GROUP BY BOOKID ORDER BY BOOKNAME

其實錯誤信息也為:

--ORDER BY子句中的列"BOOK.BookName" 無效,因為該列沒有包含在聚合函數(shù)或GROUP BY 子句中。


應該改為:

SELECT DISTINCT BOOKID,BOOKNAME FROM BOOK ORDER BY BOOKNAME
SELECT DISTINCT BOOKID,BOOKNAME FROM BOOK
SELECT BOOKID,BOOKNAME FROM BOOK GROUP BY BOOKID,BOOKNAME


GROUP BY 中使用 ORDER BY注意事項:

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ù)中,結果集同下面語句一樣

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" 無效,因為該列沒有包含在聚合函數(shù)或 GROUP BY 子句中。

HAVING后的條件不能用別名COUNT>3 必須使用COUNT(*) >3,否則報:列名 'COUNT' 無效。

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

如果把該語句寫成:

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

那么將報:

選擇列表中的列 'REQUESTMETH.method' 無效,因為該列沒有包含在聚合函數(shù)或 GROUP BY 子句中。

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

如:

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

錯誤信息為:每個 GROUP BY 表達式都必須包含至少一個列引用。


 


學習教程快速掌握從入門到精通的電腦知識