golang gorm 计算字段和获取sum()值的实现
计算表lb_ytt_user_money_log中,字段money的和
代码如下:
vartotal_money[]int sqlstr:=`select SUM(money)astotal_money from lb_ytt_user_money_log where user_id=?andl_type=1andstatus=1and(create_time>?andcreate_time<=?)` Db.Raw(sqlstr,userID,beginTimeNum,endTimeNum).Pluck("SUM(money)astotal_money",&total_money)
Pluck
将模型中的单个列作为地图查询,如果要查询多个列,可以使用Scan
Db.Raw(sqlstr,userID,beginTimeNum,endTimeNum).Pluck("SUM(money)astotal_money",&total_money)
如果把Db.Pluck换成Db.scan得出的就是0
补充:golanggorm解决mysqlsum函数列有null时报错sconvertingNULLtoint64isunsupported
当我们查询orders表order_amount字段的和时,如果order_amount字段有null值,则gorm会报错sql:
Scanerroroncolumnindex0,name"sum(order_amount)":convertingNULLtoint64isunsupported
varpriceint64
db.Table("orders").Select("sum(order_amount)").Scan(&price)
解决方法:
使用gorm的Pluck从数据库查询单个列,并将结果扫描到切片,在循环取出值计算总和,这样即使有null值,也能正确计算和,不会因为sum函数的机制导致报错
//创建一个存储查询结果的切片 varresult[]int64 varsumint64 db.Table("orders").Pluck("order_amount",&result) for_,v:=rangeresult{ sum+=v }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。