首页 >后端开发 >Golang >如何在 Golang 中使用 GORM 和 Scan 计算列的总和?

如何在 Golang 中使用 GORM 和 Scan 计算列的总和?

Susan Sarandon
Susan Sarandon原创
2024-10-24 02:31:29584浏览

How to Calculate Sum of a Column Using GORM and Scan in Golang?

计算 GORM 表中薪资列的总和

使用 Golang 处理 PostgreSQL 等关系数据库通常涉及检索聚合值。在这种情况下,计算某列(例如工资列)的总和是一项常见任务。

初始代码和问题

提供的代码尝试计算工资列的总和从“people”表但遇到错误。它使用带有 SUM(salary) 的 SELECT 语句来检索结果并将该值绑定到 NewPerson 结构。但是,这种方法是不正确的,因为 NewPerson 没有工资字段,并且查询尝试将结果直接映射到结构。

使用 Scan 修改代码

要解决此问题,需要采取不同的方法。 Golang 提供了 Scan 功能,允许开发人员检索查询结果并将其映射到自定义数据结构。下面是使用 Scan 的代码的修订版本:

<code class="go">type NResult struct {
    Salary int64 // or int, depending on the data type
}

func GetSalarySum(c echo.Context) error {
    db, err := gorm.Open("postgres", "...")
    checkError(err)
    defer db.Close()

    query := "SELECT SUM(salary) FROM people"

    var result NResult
    if err := db.Table("people").Raw(query).Scan(&result).Error; err != nil {
        fmt.Println("error->", err)
    }

    return c.JSON(http.StatusOK, result)
}</code>

在此代码中,我们定义一个自定义结构体 NResult,其中包含一个类型为 int64 或 int 的 Salary 字段,具体取决于工资列的数据类型。我们使用 Raw 方法直接执行 SELECT SUM(salary) FROM people 查询,并使用 Scan 函数检索结果并将其映射到 NResult 结构。

此修改后的代码正确检索了工资的总和列并将其作为 JSON 响应返回。

以上是如何在 Golang 中使用 GORM 和 Scan 计算列的总和?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn