SqlServer 下 Group by、having、order by、Distinct 总结
文章总结了SqlServer 下 Group by、having、order by、Distinct用法事项,有需要的朋友可学习一下。
直奔主题,如下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语句

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何優化sql中的orderBy語句?以下這篇文章為大家介紹一下優化sql中orderBy語句的方法,具有很好的參考價值,希望對大家有幫助。

先說大致的結論:在語意相同,有索引的情況下:groupby和distinct都能使用索引,效率相同。在語意相同,無索引的情況下:distinct效率高於groupby。原因是distinct和groupby都會進行分組操作,但groupby可能會進行排序,觸發filesort,導致sql執行效率低。基於這個結論,你可能會問:為什麼在語意相同,有索引的情況下,groupby和distinct效率相同?在什麼情況下,groupby會進行排序操作?帶著這兩個問題找出答案。接下來,我們先來看看dist

SQL中distinct用法詳解在SQL資料庫中,我們常常會遇到需要移除重複資料的情況。此時,我們可以使用distinct關鍵字,它能夠幫助我們去除重複數據,使得查詢結果更加清晰和準確。 distinct的基本使用方法非常簡單,只需要在select語句中使用distinct關鍵字即可。例如,以下是一個普通的select語句:SELECTcolumn_name

mysql的DISTINCT的關鍵字有很多你想不到的用處1.在count不重複的記錄的時候能用到比如SELECTCOUNT(DISTINCTid)FROMtablename;就是計算talbebname表中id不同的記錄有多少條2,在需要返回記錄不同的id的具體值的時候可以用例如SELECTDISTINCTidFROMtablename;返回talbebname表中不同的id的具體的值3.上面的情況2對於需要返回mysql表中2列以上的結果時會有歧義比如SELECTDISTINCTid,type

oracle的distinct用法是可以過濾結果集中的重複行,確保「SELECT」子句中傳回指定的一列或多列的值是唯一的。其語法為“SELECT DISTINCT 欄1,列2,列3... from 表名”,“distinct”會對傳回的結果集進行排序,可以和“order by”結合使用,提高效率。

MySQL是目前應用廣泛的關聯式資料庫之一。在大數據量儲存與查詢中,最佳化資料庫效能是至關重要的。其中,DISTINCT是常用的去重查詢運算子。本文將介紹如何透過MySQL對DISTINCT最佳化來提高資料庫查詢效能。一、DISTINCT的原理及缺點DISTINCT關鍵字用於從查詢結果中移除重複行。在大量資料的情況下,查詢中可能存在多個重複值,導致輸出資料冗餘,

重複的測試資料庫如下所示:CREATETABLE`test_distinct`(`id`int(11)NOTNULLAUTO_INCREMENT,`a`varchar(50)CHARACTERSETutf8DEFAULTNULL,`b`varchar(50)CHARACTERSETutf8DEFAULTN InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=latin1;表內測試資料如下,現在我們需要統計這三列去重後的列

SQLORDERBY子句ORDERBY語句用於根據指定的資料列對結果集進行排序。 ORDERBY語句預設會依照升序對記錄進行排序,如需依照降序排序,請使用DESC關鍵字。 "Orders"表:CompanyOrderNumberIBM3532HuluMiao2356Apple4698IBM6953實例1:以字母順序顯示公司名稱:SELECTCompany,OrderNumberFROMOrdersORDERBYCompany結果:CompanyOrderNumberApple4698H
