這是之前在 MSDN 論壇上幫網友解答的一個問題,在這做個筆記。
我們使用 SQL 指令計算總和時,都會用 SUM 搭配 GROUP,也就是選出符合的數字資料並將其連加 (如:10 + 20 + 50)。但是,要針對符合的數字資料進行連乘 (如:10 * 20 * 50) 時,又該怎麼做呢?
先回憶一下數學上的兩個觀念 --
1). LOG 相加是怎麼算的:LOG(10) + LOG(20) + LOG(30) = LOG(10*20*30)
2). 乘方和 LOG 是可以相互抵消的 (底數必須相同)
而這個問題就可以利用 POWER(10 的乘方)、LOG10(LOG 以 10 為基底)、GROUP 來解決,舉例如下:
NOTE 欲複製程式碼的讀者,先將滑鼠指標移至程式碼區,雙擊 (Double-Click) 滑鼠左鍵,此時該區程式碼應會呈現 Highlight 狀態;再按下滑鼠右鍵,於出現的選單中選擇複製。若程式碼未出現 Highlight 狀態,請重整 (Refresh) 本網頁後,再重複上述動作。
-- 建立測試資料 --declare @Test table (c1 varchar(5), c2 int) declare @Test table (c1 varchar(5), c2 float) insert into @Test values('AAA', 10) insert into @Test values('AAA', 20) insert into @Test values('AAA', 30) insert into @Test values('BBB', 40) insert into @Test values('BBB', 50) -- 得到答案 select c1, power(10.0, sum(log10(C2))) Result from @Test group by c1