首页 > 其他分享 >Gorm中使用sum查询的一个问题

Gorm中使用sum查询的一个问题

时间:2023-06-12 19:15:25浏览次数:38  
标签:count NULL gorm sum Gorm limit 查询 id

sum函数没有查到数据默认返回NULL,需要用IFNULL函数判断下

 

package gorm_tests

import (
    "fmt"
    "github.com/stretchr/testify/require"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "testing"
    "time"
)

/*
CREATE TABLE `lottery`
(
    `id`          int(10) unsigned NOT NULL AUTO_INCREMENT,
    `activity_id` int(10) unsigned NOT NULL,
    `total_limit` int(10) unsigned NOT NULL,
    `daily_limit` int(10) unsigned NOT NULL,
    `create_at`   datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `update_at`   datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `idx_activity_id` (`activity_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
*/

const (
    LotteryTableName = "lottery"
)

type Lottery struct {
    Id         uint32    `gorm:"column:id" json:"id"`
    ActivityId uint32    `gorm:"column:activity_id" json:"activityId"`          // 活动id,唯一索引
    TotalLimit uint32    `gorm:"column:total_limit" json:"totalLimit"`          // 总次数限制
    DailyLimit uint32    `gorm:"column:daily_limit" json:"dailyLimit"`          // 每日次数限制
    CreateAt   time.Time `gorm:"column:create_at;default:null" json:"createAt"` //  创建时间
    UpdateAt   time.Time `gorm:"column:update_at;default:null" json:"updateAt"` //  更新时间
}

func (l *Lottery) TableName() string {
    return LotteryTableName
}

func TestT4(t *testing.T) {
    dsn := "root:123@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    require.Equal(t, err, nil)
    fmt.Println("db: ", db)

    var sum int64
    var count int64

    // Notice 如果数据库中没有数据,count默认返回0
    errCount := db.Table(LotteryTableName).Select("count(total_limit) as count").Find(&count).Error
    require.Equal(t, errCount, nil)
    fmt.Println("count: ", count) // 0

    // 会报错!!!!!!
// Notice 如果数据库中没有查到数据,sum默认返回null,此时用int64数据解析会报错!
    //errSum := db.Table(LotteryTableName).Select("sum(total_limit) as sum").Find(&sum).Error
    //require.Equal(t, errSum, nil)
    //fmt.Println("sum: ", sum)

    // Notice 正确使用sum的方法 IFNULL函数判断
    errSum := db.Table(LotteryTableName).Select("IFNULL(sum(total_limit), 0) as sum").Find(&sum).Error
    require.Equal(t, errSum, nil)
    fmt.Println("sum: ", sum) // 0
}

~~~

标签:count,NULL,gorm,sum,Gorm,limit,查询,id
From: https://www.cnblogs.com/paulwhw/p/17475855.html

相关文章

  • Educational Codeforces Round 5-E. Sum of Remainders
    原题链接E.SumofRemainderstimelimitpertestmemorylimitpertestinputoutputCalculatethevalueofthesum: n mod 1 + n mod 2 + n mod 3 +...+ n mod m......
  • oracle 数据库当前连接查询 被占用的连接 哪些用户正在使用数据 杀掉进程
    --查询数据库当前进程的连接数:selectcount(*)fromv$process;--查看数据库当前会话的连接数:selectcount(*)fromv$session;--查看数据库的并发连接数:selectcount(*)fromv$sessionwherestatus='ACTIVE';--查看当前数据库建立的会话情况:selectsid,serial#,username,pr......
  • 文件minio进阶 分页查询
    文章目录前言一、minio使用二、代码1.mino版本是最新的,那么pom中也要最新的2.部分代码总结前言就是现在通过minio管理文件,然后不需要其他信息,所以我也就没有用传统方式,在mysql中做文件记录,直接用minio做了文件存储,以及文件查询;一、minio使用1docker安装最新版minio.开......
  • minio查询桶中文件,桶目录中文件
    文章目录前言一、文件桶中的文件夹是什么?二、文件查询1.桶中文件查询2.桶中文件夹中的文件查询总结前言文章再续,书接上文minio进阶分页查询说到了文件,可以实现分页查询,然后上次查询的是桶中的文件列表,这次遇到了需要数据隔离的文件,也就是需要在桶中再次建立文件夹;然后查......
  • Redis实现分页和多条件模糊查询方案
    简介: 本文将基于Redis提供条件查询+分页的技术解决方案。 导言Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊条件查询,在面对一些需要分页、排序以及条件查询的场景时(如......
  • DDL-操作表查询
       ......
  • linux占用内存查询 --------------Linux内存占用分析的几个方法
    Linux内存占用分析的几个方法原创 入门小站 入门小站 2023-06-0121:30 发表于湖北收录于合集#Linux804个入门小站分享运维技巧及10k+Stars的开源项目265篇原创内容公众号【Linux250个常用命令速查手册】关注【入门小站】,后台回复「1001」自取......
  • SQL查询实战:大学数据库
    SQL查询实战:大学数据库原创 升哥 赛博升哥 2023-05-1418:46 发表于北京收录于合集#技术23个#数据库2个hello大家好,我是升哥。最近在学数据库,把重要主题笔记分享给大家。这次是大学数据库SQL查询实战,在MySQL上测试通过。关于导入数据库用到的SQL文件:后台......
  • 数据库关联查询--笛卡尔积
    概念笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesianproduct),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员.设A和B是两个集合,存在一个集合,他的元素是用A中元素为第一元素,B中元素为第二元素构成的有序二元组。称它为A和B的笛卡......
  • 解决gorm安装报错
    报错:go:modulegrom.io/gorm:Get"https://proxy.golang.org/grom.io/gorm/@v/list":dialtcp142.251.43.17:443:connectex:Aconnectionattemptfailedbecausetheconnectedpartydidnotproperlyrespondafteraperiodoftime,orestablishedconn......