sql 學習之 group by 及 聚合函數


1.在使用 GROUP BY 子句時,Select列表中的所有列必須是聚合列(SUM,MIN/MAX,AVG等)或是GROUP BY 子句中包括的列。同樣,如果在SELECT 列表中使用聚合列,SELECT列表必須只包括聚合列,否則必須有一個GROUP BY 子句。例如:  

select customerid,salespersonid,count(*)
from sales.salesorderheader 
where customerid <= 11010
group by customerid,salespersonid
order by customerid,salespersonid

2.聚合函數。聚合函數用於GROUP BY 字句,用於聚合分組的數據。聚合函數在和GROUP BY子句一起使用時顯示出其強大的功能。但聚合函數的使用不限於分組查詢;如果查詢語句中使用了聚合函數,而沒使用GROUP BY子句,則聚合函數是用於聚合整個結果集(匹配WHERE子句的所有行)。當不使用GROUP BY 子句時,在SELECT列表中某些聚合函數只能與其他的聚合函數一起使用,即聚合函數必須使用GROUP BY 子句才能在SELECT列表中與列明配對。例如,不使用GROUP BY子句,SELECT列表中AVG只能和SUM對應,但不能對應特定列。

3.AVG

 AVG函數用於計算平均值。

 For example:  

select salesorderid,avg(orderqty) as orderqtyavg
from sales.salesorderdetail
where salesorderid in (43660,43670,43672)
group by salesorderid

4.MIN/MAX

   顧名思義,MIN/MAX用於計算所選擇列分組的最小值與最大值。

   For example:   

select salesorderid,min(orderqty) as orderqtyavg
from sales.salesorderdetail
where salesorderid in (43660,43670,43672)
group by salesorderid

在將查詢改為Max函數,For example:

select salesorderid,max(orderqty) as orderqtyavg
from sales.salesorderdetail
where salesorderid in (43660,43670,43672)
group by salesorderid

5.除了Count(*)函數外,所有的聚合函數都忽略NULL值。要考慮到這一點對聚合結果的重要影響。許多用戶在求平均值時,把數值類型字段中的NULL值看作0,但實際上NULL值與0並不等同,並不能這樣使用。如果對有NULL值的列執行AVG函數或其他聚合函數,NULL值將不會計入聚合值中,除非使用如COALESCE()或ISNULL()等函數,將NULL值轉換成非NULL值。

Count函數可與GROUP BY 字句聯合使用。

6.使用Having子句給分組設置條件

如果要將查詢條件放到分組之后,則可以使用Having子句。

Having 子句僅用於帶有GROUP BY 子句的查詢語句中。WHERE子句應用於每一行(在變成一組的某一部分之前),而HAVING子句應用於分組的聚合值。

7.Distinct和All

可以在任意聚合函數中使用Distinct謂詞,即使聚合函數中使用Distinct謂詞沒有實際意義。例如,在AVG函數中使用Distinct沒有任何意義。

很少在查詢語句中使用All謂詞,毫無疑問,All與Distinct謂詞含義相反。Distinct謂詞用於過濾掉重復的行,而All指包括所有的行。All是任意Select語句的默認值,但有Union的Select語句除外。

8.Insert。Insert需要注意的是插入數據時候的格式問題。插入數值不需要使用引號,而插入字符數據時要使用引號。但插入date數據類型時需要使用引號(實際上,其作為字符串輸入,然后再轉換成日期)。

多行插入:多行插入要用逗號分隔,例如:

  INSERT INTO Sales

    (StoreCode, OrderNumber, OrderDate, Quantity, Terms, TitleID) 

  VALUES

    ('TST2', 'TESTORDER2', '01/01/1999', 10, 'NET 30', 1234567),

    ('TST2', 'TESTORDER3', '02/01/1999', 10, 'NET 30', 1234567);

這樣可以使用一條插入語句插入2條數據。

9.INSERT INTO ......SELECT 語句 

語法結構:INSERT INTO <table name>

       [<column list>]

     <SELECT statement>

10.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM