【正文】
總子句 2022/3/13 82 如果 GROUP BY子句中指定了多個(gè)列,則表示要基于這些列的唯一組合來(lái)進(jìn)行分組。在分組過(guò)程中,首先按第一列進(jìn)行分組并按升序排列,然后再按第二列進(jìn)行分組并按升序排列,依次類推,最后在分好的組中進(jìn)行匯總。 使用明細(xì)匯總子句 ? 使用 GROUP BY對(duì)查詢出來(lái)的數(shù)據(jù)作分類匯總后,只能顯示統(tǒng)計(jì)結(jié)果,看不到詳細(xì)的數(shù)據(jù)。使用COMPUTE和 COMPUTE BY子句既能瀏覽詳細(xì)數(shù)據(jù)又可看到統(tǒng)計(jì)的結(jié)果 ? COMPUTE生成的匯總列,出現(xiàn)在結(jié)果集的最后 ? 其語(yǔ)法格式為: 2022/3/13 83 COMPUTE affregate_function(column_name)[,…n] [ BY column_name [,…n] ] 表示聚合函數(shù) 使用明細(xì)匯總子句 2022/3/13 84 使用明細(xì)匯總子句 2022/3/13 85 COMPUTE類似于總計(jì) 使用明細(xì)匯總子句 2022/3/13 86 COMPUTE BY類似于小計(jì) 使用明細(xì)匯總子句 ? 注意: ? COMPUTE [ BY ]子句不能與 SELECT INTO子句一起使用 。 ? COMPUTE子句中的列必須出現(xiàn)在 SELECT子句的列表中 。 ? COMPUTE BY表示按指定的列進(jìn)行明細(xì)匯總 , 使用 BY關(guān)鍵字時(shí)必須同時(shí)使用 ORDER BY子句 , 并且 COMPUTE BY后出現(xiàn)的列必須具有與 ORDER BY后出現(xiàn)的列相同的順序 , 且不能跳過(guò)其中的列 。 例如:如果 ORDER BY子句按照如下順序指定排序列: ORDER BY CategoryID,Price,Stocks ? 則 COMPUTE BY后的列表只能是下面任一種形式: ? BY CategoryID,Price,Stocks ? BY CategoryID,Price ? BY CategoryID 2022/3/13 87 使用明細(xì)匯總子句 2022/3/13 88 課堂練習(xí) 4.小王在 SQL Server 2022數(shù)據(jù)庫(kù)中創(chuàng)建了訂單表,其創(chuàng)建語(yǔ)句如下: CREATE TABLE 訂單表 ( 訂單號(hào) int IDENTITY(1,1) PRIMARY KEY, 雇員代號(hào) int NOT NULL, 地區(qū)代號(hào) int NOT NULL, 訂購(gòu)日期 datetime NOT NULL, 訂購(gòu)金額 money NOT NULL ) 銷售經(jīng)理想要獲得總的銷售金額和按地區(qū)分組的總銷售金額。下面哪條語(yǔ)句能完成該任務(wù)? (多選) 2022/3/13 89 課堂練習(xí) 2022/3/13 90 A. SELECT地區(qū)代號(hào) ,訂購(gòu)金額 FROM 訂單表 ORDER BY 地區(qū)代號(hào) COMPUTE SUM(訂購(gòu)金額 ) B. SELECT地區(qū)代號(hào) ,訂購(gòu)金額 FROM 訂單表 ORDER BY 地區(qū)代號(hào) COMPUTE SUM(訂購(gòu)金額 ) BY 地區(qū)代號(hào) COMPUTE SUM(訂購(gòu)金額 ) C. SELECT 地區(qū)代號(hào) , SUM(訂購(gòu)金額 ) FROM 訂單表 GROUP BY 地區(qū)代號(hào) D. SELECT 地區(qū)代號(hào) , SUM(訂購(gòu)金額 ) FROM 訂單表 GROUP BY地區(qū)代號(hào) COMPUTE SUM(SUM(訂購(gòu)金額 )) 課堂練習(xí) 5.小王在 SQL Server 2022數(shù)據(jù)庫(kù)中創(chuàng)建了如下兩個(gè)表: CREATE TABLE 雇員表 ( 雇員代號(hào) int IDENTITY(10001,1) PRIMARY KEY, 雇員姓名 varchar(20) NOT NULL, 通信地址 varchar(200) NULL ) CREATE TABLE 訂單表 ( 訂單號(hào) int IDENTITY(1,1) PRIMARY KEY, 雇員代號(hào) int NOT NULL, 客戶代號(hào) int NOT NULL, 訂購(gòu)日期 datetime NOT NULL, 訂購(gòu)金額 money NOT NULL) 他需要獲得 2022年 9月 1日每個(gè)雇員的最高的一筆銷售金額,要求列出“雇員代號(hào)”、“雇員姓名”、“訂購(gòu)日期”、最高的“訂購(gòu)金額”。下面哪個(gè)語(yǔ)句能完成該功能? 2022/3/13 91 A. SELECT , , , FROM 雇員表 AS a JOIN 訂單表 AS b ON = WHERE = 39。09/01/202239。 AND 訂購(gòu)金額 IN (SELECT MAX(訂購(gòu)金額 ) FROM 訂單表 ) B. SELECT , , ,MAX(訂購(gòu)金額 ) FROM 雇員表 AS a JOIN 訂單表 AS b ON = AND = 39。09/01/202239。 GROUP BY , , C. SELECT , , ,MAX(訂購(gòu)金額 ) FROM 雇員表 AS a JOIN 訂單表 AS b ON = WHERE = 39。09/01/202239。 GROUP BY , , D. SELECT , , ,MAX(訂購(gòu)金額 ) FROM 雇員表 AS a JOIN 訂單表 AS b ON = WHERE = 39。09/01/202239。 AND 訂購(gòu)金額 IN (SELECT MAX(訂購(gòu)金額 ) FROM 訂單表 ) 2022/3/13 92 課堂練習(xí) Any question?