golang gorm 計算欄位和獲取sum()值的實現
阿新 • • 發佈:2020-12-21
計算表lb_ytt_user_money_log 中,欄位money的和
程式碼如下:
var total_money []int sqlstr := `select SUM(money) as total_money from lb_ytt_user_money_log where user_id = ? and l_type = 1 and status=1 and (create_time> ? and create_time <= ?)` Db.Raw(sqlstr,userID,beginTimeNum,endTimeNum).Pluck("SUM(money) as total_money",&total_money)
Pluck
將模型中的單個列作為地圖查詢,如果要查詢多個列,可以使用Scan
Db.Raw(sqlstr,&total_money)
如果把Db.Pluck換成Db.scan得出的就是0
補充:golang gorm 解決mysql sum函式列有null時 報錯 sconverting NULL to int64 is unsupported
當我們查詢orders表order_amount欄位的和時,如果order_amount欄位有null值,則gorm會報錯sql:
Scan error on column index 0,name "sum(order_amount)": converting NULL to int64 is unsupported
var price int64
db.Table("orders").Select("sum(order_amount)").Scan(&price)
解決方法:
使用gorm的Pluck 從資料庫查詢單個列,並將結果掃描到切片,在迴圈取出值計算總和,這樣即使有null值,也能正確計算和,不會因為sum函式的機制導致報錯
//建立一個儲存查詢結果的切片 var result []int64 var sum int64 db.Table("orders").Pluck("order_amount",&result ) for _,v := range result{ sum += v }
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。