台灣最大程式設計社群網站
線上人數
1341
 
會員總數:246037
討論主題:189624
歡迎您免費加入會員
討論區列表 >> MS SQL >> sql中如何計算字串平均數
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
sql中如何計算字串平均數
價值 : 50 QP  點閱數:429 回應數:5
樓主

初階MIS
初學者
45 8
258 26
發送站內信

目前遇到一個問題是我需要將各學生的各科成績做加總算平均,
不知道是不是因為score的欄位當初設計為nvarchar的型態,
我在select round(avg(cast(Score as float)),2) 所產生的結果一直都為整數,
但我目標是取至小數點第一位,
想問版上的大家我是哪個部分做錯嗎?





搜尋相關Tags的文章: [ sql ] , [ 平均 ] ,
本篇文章發表於2020-03-30 16:51
1樓
作者回應

初階MIS
檢舉此回應
補充說明:表大概是長這樣

小明|95
小明|90
小華|85
小華|80

預產結果

小明|92.5
小華|82.5
本篇文章回覆於2020-03-30 16:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
select left(Score,2) 姓名,right(Score,2) 分數 into #xx from table

select 姓名,avg(分數) 平均 into #xxx from #xx group by 姓名

select 姓名+'|'+平均 from #xxx
本篇文章回覆於2020-03-30 22:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

初階MIS
檢舉此回應
先感謝2樓大大百忙之中回覆,
不過似乎我沒有表達的很明確導致你誤會,
我表原先只有"name","score",沒有"平均"這欄位
而我想產生的查詢結果是各學生成績的平均
然而因為型態均是nvarchar,系統提示score要先轉型才能計算,
所以我下的查詢是
select
name,
round(avg(cast(Score as float)),2)
from
table
group by name

但產出的結果avg的部分卻只四捨五入至整數,
我想要的結果是四捨五入至小數點第一位


本篇文章回覆於2020-03-31 08:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
最有價值解答

pilipala
檢舉此回應


跑的結果有產生四捨五入至小數點第一位,並不是整數
另外建議不要轉成 float,它是近似值,轉成 decimal 會比較好
本篇文章回覆於2020-03-31 09:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

初階MIS
檢舉此回應
謝謝pilipala大大百忙中抽空回覆,
昨天真的是鬼打牆...同一段code我重新開一份空白查詢就過了
本篇文章回覆於2020-03-31 09:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.