Heim  >  Artikel  >  Backend-Entwicklung  >  Wie berechnet man die Summe einer Spalte mithilfe von GORM und Scan in Golang?

Wie berechnet man die Summe einer Spalte mithilfe von GORM und Scan in Golang?

Susan Sarandon
Susan SarandonOriginal
2024-10-24 02:31:29513Durchsuche

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

Berechnung der Summe der Gehaltsspalte in einer GORM-Tabelle

Bei der Arbeit mit relationalen Datenbanken wie PostgreSQL unter Verwendung von Golang müssen häufig aggregierte Werte abgerufen werden. In diesem Fall ist die Berechnung der Summe einer Spalte, beispielsweise der Gehaltsspalte, eine häufige Aufgabe.

Anfänglicher Code und Problem

Der bereitgestellte Code versucht, die Summe der Gehaltsspalte zu berechnen aus der Tabelle „Personen“, es tritt jedoch ein Fehler auf. Es verwendet die SELECT-Anweisung mit SUM(Gehalt), um das Ergebnis abzurufen, und bindet den Wert an die NewPerson-Struktur. Dieser Ansatz ist jedoch falsch, da NewPerson kein Gehaltsfeld hat und die Abfrage versucht, das Ergebnis direkt der Struktur zuzuordnen.

Überarbeiteter Code mit Scan

Um dieses Problem zu beheben, ein anderer Ansatz ist erforderlich. Golang bietet die Scan-Funktion, die es Entwicklern ermöglicht, die Ergebnisse einer Abfrage abzurufen und sie einer benutzerdefinierten Datenstruktur zuzuordnen. Hier ist eine überarbeitete Version des Codes, der Scan verwendet:

<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>

In diesem Code definieren wir eine benutzerdefinierte Struktur NResult mit einem einzelnen Gehaltsfeld vom Typ int64 oder int, abhängig vom Datentyp der Gehaltsspalte . Wir verwenden die Raw-Methode, um die Abfrage SELECT SUM(salary) FROM people direkt auszuführen, und die Scan-Funktion, um das Ergebnis abzurufen und es der NResult-Struktur zuzuordnen.

Dieser überarbeitete Code ruft die Summe des Gehalts korrekt ab Spalte und gibt sie als JSON-Antwort zurück.

Das obige ist der detaillierte Inhalt vonWie berechnet man die Summe einer Spalte mithilfe von GORM und Scan in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn