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
    */
    
    

posted on 2019-05-28 10:31  j_x_x  阅读(874)  评论(0编辑  收藏  举报

导航