欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

xorm -sum 系列方法实例

程序员文章站 2022-04-13 22:28:16
求和数据可以使用Sum, SumInt, Sums 和 SumsInt 四个方法,Sums系列方法的参数为struct的指针并且成为查询条件。 go package main import ( "fmt" _ "github.com/go sql driver/mysql" "github.com/ ......
  • 求和数据可以使用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
    */