SqlServer 下 Group by、having、order by、Distinct 總結

來源:互聯網
上載者:User

直奔主題,如下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注意事項:

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

having 子句中的每一個元素並不一定要出現在select列表中

如果把該語句寫成:

 代碼如下 複製代碼
SELECT COUNT(*) AS COUNT,REQUEST,METHOD FROM REQUESTMETH GROUP BY
REQUEST ORDER BY REQUEST

那麼將報:

挑選清單中的列 'REQUESTMETH.method' 無效,因為該列沒有包含在彙總函式或 GROUP BY 子句中。

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

如:

 代碼如下 複製代碼
SELECT REQUEST,METHOD, COUNT(*) AS COUNT FROM REQUESTMETH GROUP BY
REQUEST,2 ORDER BY REQUEST 

錯誤資訊為:每個 GROUP BY 運算式都必須包含至少一個列引用。

 

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後面的欄位包含在彙總函式中,結果集同下面語句一樣

 

 代碼如下 複製代碼
SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY COUNTS DESC

--這樣是允許的,區別於HAVING,HAVING後不允許跟聚集合函式的別名作為過濾條件

 

 代碼如下 複製代碼
SELECT COUNT(*) AS COUNTS FROM REQUESTMETH GROUP BY REQUEST ORDER BY METHOD--

這樣是錯誤的:ORDER BY 子句中的列 "REQUESTMETH.method" 無效,因為該列沒有包含在彙總函式或 GROUP BY 子句中。


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

 代碼如下 複製代碼
SELECT DISTINCT BOOKID FROM BOOK ORDER BY BOOKNAME

以上語句將報:

--如果指定了SELECT DISTINCT,那麼ORDER BY 子句中的項就必須出現在挑選清單中。

因為以上語句類似

 代碼如下 複製代碼
SELECT BOOKID FROM BOOK GROUP BY BOOKID ORDER BY BOOKNAME

其實錯誤資訊也為:

--ORDER BY子句中的列"BOOK.BookName" 無效,因為該列沒有包含在彙總函式或GROUP BY 子句中。


應該改為:

 代碼如下 複製代碼

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

以上兩句查詢結果是一致的,DISTINCT的語句其實完全可以等效的轉換為GROUP BY語句

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.