ホームページ  >  記事  >  バックエンド開発  >  GORMを使用して列の合計を計算し、Golangでスキャンする方法は?

GORMを使用して列の合計を計算し、Golangでスキャンする方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 02:31:29513ブラウズ

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>

このコードでは、給与列のデータ型に応じて、型 int64 または int の単一の Salary フィールドを持つカスタム構造体 NResult を定義します。 。 Raw メソッドを使用して SELECT SUM(salary) FROM people クエリを直接実行し、Scan 関数を使用して結果を取得し、NResult 構造体にマップします。

この改訂されたコードは、給与の合計を正しく取得します。列を作成し、JSON レスポンスとして返します。

以上がGORMを使用して列の合計を計算し、Golangでスキャンする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。