Select CategoryID, AVG(UnitPrice), COUNT(UnitPrice) FROMdbo.Products Where UnitPrice > 30GROUP BY CategoryIDORDER BY CategoryID DESC
這個語句查詢出,所有產品分類的產品平均單價,單價計數。并且單價在 30 以上的記錄。
2、再看看這種語法,如下:
Select CategoryID, AVG(DISTINCT UnitPrice), COUNT(DISTINCTUnitPrice) FROM dbo.Products Where UnitPrice >30GROUP BY CategoryID ORDER BY CategoryID DESC
使用 DISTINCT 的時候,將會去除重復的價格平均單價。
3、如果希望在分類統(tǒng)計之后,再使用條件過濾,下面的語句可以做為參數:Select CategoryID, SUM(UnitPrice)AS SumPriceFROM dbo.ProductsGROUP BY CategoryIDHAVINGSUM(UnitPrice) > 300HAVING 與 Where 語句類似,Where是在分類之前過濾,而 HAVING 是在分類之后過濾。它和 Where 一樣使用 AND、OR、NOT、LIKE組合使用。
4、如果希望再在分類統(tǒng)計中,添加匯總行,可以使用以下語句:
Select CategoryID, SUM(UnitPrice), GROUPING(CategoryID) AS'Grouping'FROM dbo.ProductsGROUP BY CategoryID WITH ROLLUP
Grouping 這一列用于標識出哪一行是匯總行。它使用 ROLLUP 操作添加匯總行。
5、如果使用 WITH CUBE 將會產生一個多維分類數據集,如下:
Select CategoryID, SupplierID, SUM(UnitPrice) AS SumPriceFROMdbo.ProductsGROUP BY CategoryID, SupplierID WITH CUBE
它會產生一個交叉表,產生所有可能的組合匯總。
6、使用 ROLLUP CUBE 會產生一個 NULL 空值,可以使用以下語法解決,如下:
Select CASE WHEN (GROUPING(SupplierID) = 1) THEN'-1'ELSESupplierIDEND ASSupplierID,SUM(UnitPrice) AS QtySumFROM dbo.ProductsGROUP BY SupplierID WITHCUBE它首先檢查當前行是否為匯總行,如果是就可以設置一個值,這里設置為 '-1' 。
5、group by 后面有兩個列來控制分組
select 職工號 ,count(*) as 總數 from 訂購單
group by 職工號 ,供應商號

group by 后面有兩個列來控制分組順序是,先按職工號進行分組,然后再看供應商號,如果此時供應商號也相同時,這兩條記錄才是一組
6、group by 分組條件的限制
select 職工.倉庫號, 城市
from 職工,倉庫
where 倉庫.倉庫號=職工.倉庫號
group by 倉庫.倉庫號 意圖是想突破這個分組條件的限制,想把列擴展一些,失?。。?!主要是想分組后,再去和別的關系去連接,以使用到其他關系的字段,但失敗!!!!!
分析原因:假如以上的操作可以成功的話,如果是以一個"不可能為主鍵列為分組的條件,如性別"得到結果,再去和其他的關系去聯系,存在1:n的關系
//////////////////////////////////////////////////////////////////////////////////////////////////////
select 倉庫號,城市 from 倉庫
where 倉庫號 in(select 倉庫號
from 職工
group by 倉庫號 此時依然無法擺脫這個分組的限制
)
////////////////////////////////////////////////////////////////////////////////////////
select 職工.倉庫號,城市,count(*) from 職工, 倉庫
where 職工.倉庫號=倉庫.倉庫號
group by 職工.倉庫號,倉庫.城市 為這個子句添加一個列,就可以去投影了!!!!這樣就實現了以上的想法
愛華網



