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