在 GoFrame ORM 中,可以使用 Group、Order 和 Having 方法来执行分组、排序和聚合查询。

Group 分组查询

Group 方法用于指定分组条件,通常用于对查询结果进行分组统计。
package main

import (
"fmt"
"github.com/gogf/gf/database/gdb"
"your_project/model"
)

func main() {
// 创建数据库连接
db := gdb.New()

// 分组查询
result, err := db.Model(&model.User{}).
Fields("age, COUNT(*) as count").
Group("age").
OrderBy("age").
All()

if err != nil {
fmt.Println("查询失败:", err)
return
}

// 处理查询结果
fmt.Println(result)
}

在上述代码中,我们使用 Group 方法指定了按照年龄字段进行分组查询,并使用 COUNT(*) 统计每个分组的记录数量。

Order 排序查询

Order 方法用于指定排序条件,可以根据一个或多个字段进行升序或降序排序。
package main

import (
"fmt"
"github.com/gogf/gf/database/gdb"
"your_project/model"
)

func main() {
// 创建数据库连接
db := gdb.New()

// 排序查询
result, err := db.Model(&model.User{}).
Fields("id, name, age").
OrderBy("age DESC").
Limit(10).
All()

if err != nil {
fmt.Println("查询失败:", err)
return
}

// 处理查询结果
fmt.Println(result)
}

在上述代码中,我们使用 OrderBy 方法指定了按照年龄字段降序排列查询结果。

Having 分组后条件过滤

Having 方法用于在分组后对分组结果进行条件过滤,类似于 Where 方法,但 Having 用于分组后的聚合条件过滤。
package main

import (
"fmt"
"github.com/gogf/gf/database/gdb"
"your_project/model"
)

func main() {
// 创建数据库连接
db := gdb.New()

// 分组查询后条件过滤
result, err := db.Model(&model.User{}).
Fields("age, COUNT(*) as count").
Group("age").
Having("age > ?", 18).
OrderBy("age").
All()

if err != nil {
fmt.Println("查询失败:", err)
return
}

// 处理查询结果
fmt.Println(result)
}

在上述代码中,我们使用 Having 方法在分组查询后进行条件过滤,只保留年龄大于18的分组统计结果。

这些方法可以根据实际需求在查询中进行分组、排序和条件过滤操作,使得查询结果更加灵活和符合业务需求。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7640/GoFrame