• xorm -sum 系列方法实例


    • 求和数据可以使用Sum, SumInt, Sums 和 SumsInt 四个方法,Sums系列方法的参数为struct的指针并且成为查询条件。

      package main
      
      import (
      	"fmt"
      	_ "github.com/go-sql-driver/mysql"
      	"github.com/go-xorm/xorm"
      	"log"
      	"time"
      )
      
      var engine *xorm.Engine
      
      type User struct {
      	Name      string    `xorm:"varchar(25) 'name'"`
      	Id        int       `xorm:"pk 'id' autoincr"`
      	Money     int       `xorm:" 'money' "`
      	Age       int       `xorm:"age"`
      	CreatedAt time.Time `xorm:"created"`
      }
      
      func main() {
      	var err error
      	engine, err = xorm.NewEngine("mysql", "root:123456@/test")
      	if err != nil {
      		log.Fatal(err)
      		return
      	}
      	//创建表和插入数据
      	/*	err = engine.CreateTables(User{})
      		if err != nil {
      			log.Fatal(err)
      			return
      		}
      
      		u := make([]User, 3)
      		u[0].Name = "u0"
      		u[0].Money = 1
      		u[0].Age = 1
      		u[1].Name = "u1"
      		u[1].Money = 2
      		u[1].Age = 1
      		u[2].Name = "u2"
      		u[2].Money = 3
      		u[2].Age = 1
      
      		_, err = engine.Insert(u)
      		if err != nil {
      			log.Fatal(err)
      			return
      		}
      	*/
      
      	/* 	Sum 求某个字段的和,返回float64*/
      
      	uu := new(User)
      	total, err := engine.Where("name > ?", "u0").Sum(uu, "money")
      	if err != nil {
      		log.Fatal(err)
      		return
      	}
      	fmt.Printf("sum方法,名字大于u0的所有人的钱的总和是 %d", int(total))
      	fmt.Println()
      
      	/*SumInt 求某个字段的和,返回int64*/
      
      	uu1 := new(User)
      	total1, err := engine.Where("name > ?", "u0").SumInt(uu1, "money")
      	fmt.Printf("sumInt方法,名字大于u0的所有人的钱的总和是 %d", total1)
      	fmt.Println()
      
      	/*
      		Sums 求某几个字段的和, 返回float64的Slice
      		ss := new(SumStruct)
      		totals, err := engine.Where("id >?", 1).Sums(ss, "money", "rate")
      		fmt.Printf("money is %d, rate is %.2f", int(total[0]), total[1])
      	*/
      
      	uu2 := new(User)
      	total2, err := engine.Where("name > ?", "u0").Sums(uu2, "money", "age")
      	fmt.Printf("sums方法,名字大于u0的所有人的钱的总和是 %f,年龄的和是 %f", total2[0], total2[1])
      	fmt.Println()
      
      	/*	SumsInt 求某几个字段的和, 返回int64的Slice
      		ss := new(SumStruct)
      		totals, err := engine.Where("id >?", 1).SumsInt(ss, "money")
      		fmt.Printf("money is %d", total[0])*/
      
      	uu3 := new(User)
      	total3, err := engine.Where("name > ?", "u0").SumsInt(uu3, "money", "age")
      	fmt.Printf("sumsInt方法,名字大于u0的所有人的钱的总和是 %d,年龄的和是 %d", total3[0], total3[1])
      	fmt.Println()
      }
      
      /*输出:
      sum方法,名字大于u0的所有人的钱的总和是 5
      sumInt方法,名字大于u0的所有人的钱的总和是 5
      sums方法,名字大于u0的所有人的钱的总和是 5.000000,年龄的和是 2.000000
      sumsInt方法,名字大于u0的所有人的钱的总和是 5,年龄的和是 2
      */
      
      
  • 相关阅读:
    祖传屎山代码
    WebService原理及重要术语
    ML-For-Beginners
    Row Level Security行级数据安全,简称RLS。
    浅析 Dapr 里的云计算设计模式
    讲师征集| .NET Conf China 2021正式启动
    为什么 Dapr 如此令人兴奋
    Open Application Model(OAM)的 Kubernetes 标准实现 Crossplane 项目 成为 CNCF 孵化项目
    kubectl 的插件管理工具krew
    PrimeBlazor 组件以MIT 协议开源
  • 原文地址:https://www.cnblogs.com/jiangxiangxiang/p/10935674.html
Copyright © 2020-2023  润新知