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