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>
このコードでは、給与列のデータ型に応じて、型 int64 または int の単一の Salary フィールドを持つカスタム構造体 NResult を定義します。 。 Raw メソッドを使用して SELECT SUM(salary) FROM people クエリを直接実行し、Scan 関数を使用して結果を取得し、NResult 構造体にマップします。
この改訂されたコードは、給与の合計を正しく取得します。列を作成し、JSON レスポンスとして返します。
以上がGORMを使用して列の合計を計算し、Golangでスキャンする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。