閑來寫下with cube的用法
cube運算子在 SELECT 語句的 GROUP BY 子句中指定。該語句的挑選清單應包含維度列和彙總函式運算式。GROUP BY 應指定維度列和關鍵字 WITH CUBE。結果集將包含維度列中各值的
所有可能組合,以及與這些維度值組合相匹配的基礎行中的彙總值。
先看下錶:
我們以id彙總查詢出平均分
這一條SQL語句與上面唯一不同之處即為多了後面的 with cube,而結果卻是比前面更多了一條結果,它同樣是按類ID的平均分,不同是又多了最後一個結果null 4,這個是什麼呢,我們來看第一段,with cube 是 包含所有可能的組合,我們根據ID分,它幫我們按ID查出平均總,同時再幫我們計算出所有的平均分,即該表ID為1與2 的平均分。這個我們可以在很多地方應用,如按性別統計工資,按部門統計業績……
其實實際中,我們往往就得到更準確的資料,即~上面結果應該以小數形式為好~其實上面結果也是不準確的,SQL將其四捨五入了~
我們式式辦法~
我們發現有了,有了小數,但再細心一看,結果是不對的,這樣SQL相當於就將前一步的操作結果轉換成小數,直接在4後面加了二個0,這顯示不對,那麼SQL為什麼會這樣,我們又如何解決,其實在表voteDetails中,我們的voteNum欄位為int型,那麼當我們以avg(voteNum)計算時,SQL就會以voteNum的資料類型計算,也即為int,所以操作結果為int型,會四捨五入,這樣雖然我們cast(avg(voteNum) as decimal(20,2)),但也僅僅是將avg計算之後的整形轉換為decimail(20,2)保留二位小數。
知道這個原理,我們就好辦了!在avg計算之前將資料類型轉換。如下嘗試: