程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL停止排序、分組、統計的10個新技能分享

SQL停止排序、分組、統計的10個新技能分享

編輯:MSSQL

SQL停止排序、分組、統計的10個新技能分享。本站提示廣大學習愛好者:(SQL停止排序、分組、統計的10個新技能分享)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL停止排序、分組、統計的10個新技能分享正文


1.應用排序使數據有序
平日,你的一切數據真正須要的僅僅是按某種次序分列。SQL的ORDER BY語句可以以字母或數字次序組織數據。是以,類似的值按組排序在一路。但是,這個分組時排序的成果,其實不是真的分組。ORDER BY顯示每筆記錄而分組能夠代表許多記載。
2.停止分組除去反復值

排序和分組之間的最年夜差別是:排序的數據顯示一切記載(在限制尺度規模以內),而分組數據不是顯示一切記載。GROUP BY語句關於異樣的值只顯示一筆記錄。例如,上面的語句中的GROUP BY語句對數據源中反復湧現的數據只前往獨一的zip編碼列。

SELECT ZIP FROM Customers GROUP BY ZIP 
 
只包含由GROUP BY和SELECT語句配合界說的那些記載,換句話說,SELECT列表必需知足GROUP BY列表,然則有一個破例就是SELECT列表可以包括聚合函數(GROUP BY語句不許可應用聚合函數)。須要留意的是GROUP BY語句不會對成果分組停止排序。為了使分組按字母或數字有序分列,須要添加ORDER BY語句。另外,在GROUP BY語句中不克不及援用應用了別號的字段。分組欄目必需是潛伏的數據,但它們其實不須要顯示在成果中。
3.在分組之進步行數據挑選
 
你可以添加一個WHERE語句來挑選有GROUP BY所得分組中的數據。例如,上面的語句只前往肯塔基州顧客的獨一ZIP編碼列。

SELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ZIP 
 
必需留意的是WHERE語句是在GROUP BY語句求值之進步行數據過濾的。與GROUP BY語句一樣,WHERE語句也不支撐聚合函數。
4.前往一切分組
 
當你應用WHERE語句過濾數據時,成果分組中只顯示你指定的那些記載,而相符分組界說然則不知足過濾前提的數據不會包括在某個分組中。當你想在分 組中包括一切數據時添加症結字ALL便可,這時候WHERE前提就不起感化。例如,在後面的例子中添加症結字ALL就會前往一切的ZIP分組,而不是僅在肯 塔基州的那些。
 
SELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ALL ZIP 

如許看來,這兩個語句存在抵觸,你能夠不會以這類方法應用症結字ALL。當你應用聚合函數盤算某一列時,應用ALL症結字能夠會很便利。例如,上面的語句盤算每一個肯塔基州ZIP中的顧客數,同時,還會顯示其它的ZIP值。
 
SELECT ZIP, Count(ZIP) AS KYCustomersByZIP FROM Customers WHERE State = 'KY' GROUP BY ALL ZIP 
 
成果分組包含潛伏數據中的一切ZIP值,但是,關於那些不是肯塔基州ZIP分組的聚合列(KYCustomersByZIP)將會顯示0。長途查詢不支撐GROUP BY ALL。
5.分組後挑選數據
WHERE語句在GROUP BY語句之進步行盤算。當你須要在分組以後挑選數據時,可使用HAVING語句。平日情形下,WHERE語句和HAVING語句的前往成果是一樣的,但 是值得留意的是這兩個語句弗成交換。當你困惑時,可以遵守上面的解釋:應用WHERE語句過濾記載,應用HAVING語句過濾分組。

普通情形,你會應用HAVING語句和某個聚合函數盤算一個分組。例如,上面的語句前往一個獨一的ZIP編碼列,然則能夠不會包括潛伏數據源中一切的ZIP。

SELECT ZIP, Count(ZIP) AS Customers FROM Customers GROUP BY ZIP HAVING Count(ZIP) = 1 
 
只要那些包括一名顧客的分組顯示在成果中。
6.進一步懂得WHERE和HAVING語句
假如你對什麼時候應當應用WHERE,什麼時候應用HAVING仍然很困惑,請遵守上面的解釋:
WHERE語句在GROUP BY語句之前;SQL會在分組之前盤算WHERE語句。
HAVING語句在GROUP BY語句以後;SQL會在分組以後盤算HAVING語句。
7.應用聚合函數統計分組數據
 
分組數據可以贊助我們剖析數據,然則有時我們能夠須要更多的信息而不只僅是分組。你可使用聚合函數來統計分組數據。例如,上面的語句顯示每批訂購單的總價格。

SELECT OrderID, Sum(Cost * Quantity) AS OrderTotal  FROM Orders GROUP BY OrderID 
 
關於其它的分組來講,SELECT和GROUP BY列必需婚配。而SELECT語句包括聚合函數時這一規矩是一個破例.
8.統計聚合數據
 
你可以持續統計數據為每一個分組顯示一個分類統計。SQL的ROLLUP操作符可認為每一個分組顯示一個額定的分類統計。這個分類統計是應用聚合函數盤算每一個分組中的一切記載獲得的成果。上面的語句為每一個分組盤算OrderTotal:

SELECT Customer, OrderNumber, Sum(Cost * Quantity)  AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH ROLLUP 

關於有兩個分離為20和25 OderTotal值的分組,ROLLUP顯示一個OrderTotal值45。ROLLUP成果中的第一筆記錄是獨一的,由於它是盤算一切分組記載,這個值是全部記載集的總值。
ROLLUP在聚合函數中不支撐 DISTINCT,也不支撐GROUP BY ALL語句。
9.統計每一個列
 
CUBE操作符比ROLLUP更進一步,它前往每一個分組中反復值的個數。它的成果和ROLLUP雷同,然則對每位客戶的每列CUBE包括一個額定的記載。上面的語句顯示每一個分組的統計和額定每位客戶的統計。

SELECT Customer, OrderNumber, Sum(Cost * Quantity)  AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH CUBE 
 
CUBE可以給最綜合的統計。它不只完成聚合和ROLLUP的功效,還可以盤算界說分組的其它列,換句話說,CUBE統計每一個能夠的列組合。
CUBE不支撐GROUP BY ALL語句。
10:對統計成果排序
 
當CUBE的成果使人困惑時(它常常是如許),可以添加一個GROUPING函數,以下所示:
 
SELECT GROUPING(Customer), OrderNumber, Sum(Cost * Quantity) AS OrderTotal FROM Orders GROUP BY Customer, OrderNumber WITH CUBE 
 
成果中每行包括兩個額定的值:
值1表現右邊的值是一個統計值,是ROLLUP或CUBE的操作符。

值0表現右邊的值是一條由最後的GROUP BY語句發生的具體記載。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved