SQL With cube

來源:互聯網
上載者:User
閑來寫下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計算之前將資料類型轉換。如下嘗試:

得到預期結果,小數不是二位沒關係,我們可以 在avg計算後的結果再轉換一次,保留二們小數!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.