使用 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中文網其他相關文章!