首页 > 其他分享 >go gorm通用分组统计

go gorm通用分组统计

时间:2024-10-15 11:53:14浏览次数:3  
标签:colField self reflect var dbc 分组 dbFields go gorm

func Test027_GeneralGroupStatMap(t *testing.T) {

    dbRequest := Default().SetTableName("contact_shop")
    dbRequest.OrderByDesc("id").SetPageSize(3)
    dbRequest.Ge("id", 1)
    var result, err = dbRequest.GroupStat("id,name", "updated_by")
    if err != nil {
       golog.Error(err)
    }
    golog.Info(jsonutils.ToJsonPretty(result))

}

INFO[2024-10-1015 11:51:59]D:/git.ichub.com/web/webcli120/goconfig/base/goutils/go_log.go:88 git.ichub.com/general/webcli120/goconfig/base/goutils.Info() [
     {
          "Name": "leijmd之家",
          "Avg": "1010835919455256579.0",
          "Max": "1010835919455256579",
          "Min": "1010835919455256579",
          "Sum": "1010835919455256579",
          "Count": 1,
          "Id": "1010835919604088835"
     },
     {
          "Sum": "722893462981345281",
          "Count": 1,
          "Id": "989029496986042371",
          "Name": "日日日日日",
          "Avg": "722893462981345281.00",
          "Max": "722893462981345281",
          "Min": "722893462981345281"
     },
     {
          "Name": "5J0gjO之家",
          "Avg": "988961132056248323.00",
          "Max": "988961132056248323",
          "Min": "988961132056248323",
          "Sum": "988961132056248323",
          "Count": 1,
          "Id": "988961132171067395"
     }

--- PASS: Test027_GeneralGroupStatMap (0.77s)

func (self *PageDbRequest) GroupStat(groupFields, statfield string) ([]map[string]any, error) {

var fields = ` groupFields, sum(statField)  ,max(statField),count(statField) ,
            min(statField),count(statField) ,avg(statField)  `
fields = strings.ReplaceAll(fields, "statField", statfield)
fields = strings.ReplaceAll(fields, "groupFields", groupFields)

var dbc = self.GetDB().Table(self.TableName).Select(fields).Group(groupFields).Offset(self.Start()).Limit(self.PageSize)
dbc = self.BuildWhere(dbc)
     if self.IfOrderBys() {
       dbc = self.Order(dbc)
    }
    var rows, err = dbc.Rows()
    if err != nil {
       golog.Error(err)
       return nil, err
    }
    defer func() {
       rows.Close()
    }()
    var records = make([]map[string]any, 0)
    var record = self.CreateStatStru(groupFields)
    for rows.Next() {
       dbc.ScanRows(rows, record)
       records = append(records, jsonutils.Stru2Map(record))
       record = clone.Clone(record)
    }

    golog.Info(records)
    return records, nil

}
func (self *PageDbRequest) CreateStatStru(strfields string) any {

    var statFields = "Avg,Max,Min,Sum"
    dbFields := []reflect.StructField{}
    for _, field := range strings.Split(strfields, ",") {
       var colField = reflect.StructField{
          Name: stringutils.Capitalize(field),
          Type: reflect.TypeOf(""),
       }
       dbFields = append(dbFields, colField)
    }

    for _, field := range strings.Split(statFields, ",") {
       var colField = reflect.StructField{
          Name: stringutils.Capitalize(field),
          Type: reflect.TypeOf(""),
       }
       dbFields = append(dbFields, colField)
    }

    var colField = reflect.StructField{
       Name: "Count",
       Type: reflect.TypeOf(int(0)),
    }
    dbFields = append(dbFields, colField)

    colField = reflect.StructField{
       Name: "BaseEntity",
       Type: reflect.TypeOf(basedto.BaseEntity{}),
       Tag:  `json:"-"`,
    }
    dbFields = append(dbFields, colField)

    dbtableType := reflect.StructOf(dbFields)
    var stru = reflect.New(dbtableType).Elem().Addr().Interface()
    baseutils.IfProxy(stru)
    return stru

}

标签:colField,self,reflect,var,dbc,分组,dbFields,go,gorm
From: https://blog.csdn.net/leijmdas/article/details/142943004

相关文章

  • python毕业设计基于Django的鲜花销售-花店网站
    文章目录前言详细视频演示一、项目介绍二、功能介绍三、核心代码数据库参考四、效果图五、文章目录前言  花卉商城系统是一个综合性的在线销售平台,专注于提供各种花卉植物的购买服务。该系统具备商品浏览、在线下单、支付结算以及订单跟踪等功能,用户可以轻松选......
  • Golang中接口和结构体之间转换的方法
    目录接口转结构体结构体转接口使用ok-idiom进行安全的类型断言在Golang中,接口和结构体之间的转换涉及到类型断言和类型断言的操作符。接口转结构体如果我们有一个接口变量,并且我们知道它的内部具体类型,我们可以使用类型断言来将其转换为该具体类型的结构体。packagemain......
  • [python毕业设计]免费分享一套基于Python的Django个人记账管理系统【论文+源码+SQL脚
    大家好,我是java1234_小锋老师,看到一个不错的基于Python的Django个人记账管理系统,分享下哈。项目视频演示【免费】基于Python的Django个人理财(个人记账)管理系统Python毕业设计_哔哩哔哩_bilibili项目介绍个人记账的主要对象不像企业那样,是企业的资产和资本这些大量的资......
  • Go 语言基准测试入门
    之前在写Java的文章的时候,如果想在本地进行某段代码的性能测试(通常是对比另外一段或者几段),就会用到基准测试框架JMH,也的确非常好用。虽然我学习Go语言有一段时间了,对于基准测试还没有涉猎,下面就分享Go语言的基准测试入门实践。什么是基准测试基准测试(Benchmarking)是一种通......
  • Google Play上架对于代理IP地址的选择和要求
    在移动应用的开发和发布过程中,GooglePlay作为主要的应用分发平台,吸引了众多开发者的关注。然而,随着市场竞争的加剧和上架审核机制的严格化,许多开发者开始关注在上架过程中使用代理IP地址的策略。本文将探讨GooglePlay上架对代理IP地址的要求,并提供一些建议。一、代理IP地址......
  • (转)探索 Go 语言的内建函数 recover
    原文:https://blog.csdn.net/qq_35240081/article/details/140758441在Go语言中,recover是一个内建函数,用于从panic状态中恢复执行。recover只能在延迟函数(defer)中使用,如果没有panic被触发,recover返回nil。本文将详细介绍recover函数的使用场景和示例。recover函数的......
  • 代码江湖:快问快答 -【Golang】
    Golang筑基期1.Go语言的应用场景和优势有哪些?2.Go的数据类型有哪些?如何声明变量?3.如何定义和使用函数?支持哪些参数和返回值类型?4.什么是数组和切片?它们之间有什么区别?5.Go中的map是什么?如何创建和使用map?6.如何使用控制结构(if、for、switch)进行流程控制?7.什......
  • POLIR-Goverment-Taxation:税收-Receipt:发票-真伪查询:https://inv-veri.chinatax.go
    1.查询网址:https://inv-veri.chinatax.gov.cn/发票代码:旧版发票上有发票代码,一并输入。普票,只需要输入发票号码开票日期开具金额(不含税)验证码增值税专用发票,同上图示:......
  • django异步情况下执行orm操作
    importasynciofromchannels.dbimportdatabase_sync_to_asyncfrom.modelsimportConversationclassLlmConsumer(AsyncWebsocketConsumer):def__init__(self,*args,**kwargs):super().__init__(args,kwargs)self.chat_id=None......
  • django实现sse接口
    基于django来实现sse最近在实现通过post调用三方的接口得到sse流数据,并且自己需要用拿到的数据用sse流在返回给前端fromrest_framework.viewsimportAPIViewfromdjango.httpimportStreamingHttpResponse,JsonResponseclassChatMessageViewSet(APIView):defpost......