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.
