使用 Golang 处理 PostgreSQL 等关系数据库通常涉及检索聚合值。在这种情况下,计算某列(例如工资列)的总和是一项常见任务。
提供的代码尝试计算工资列的总和从“people”表但遇到错误。它使用带有 SUM(salary) 的 SELECT 语句来检索结果并将该值绑定到 NewPerson 结构。但是,这种方法是不正确的,因为 NewPerson 没有工资字段,并且查询尝试将结果直接映射到结构。
要解决此问题,需要采取不同的方法。 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中文网其他相关文章!