1. 程式人生 > 程式設計 >golang gorm 計算欄位和獲取sum()值的實現

golang gorm 計算欄位和獲取sum()值的實現

計算表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
 }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。