【问题标题】:How to get sum of salary column from table GORM如何从表 GORM 中获取工资列的总和
【发布时间】:2018-12-13 08:42:43
【问题描述】:

我正在使用 PostgreSQL 和 golang 来编写后端。 我在获取工资总和列时遇到问题。

这是我的代码:

    func GetSalarySum(c echo.Context) error {
        db, err := gorm.Open("postgres", "host=localhost port=5433 user=postgres dbname=testone password=root sslmode=disable")
        checkError(err)
        defer db.Close()
        type UpdatedAddress struct {
            City  string `json:"city;"`
            State string `json:"state;"`
            Pin   string `json:"pin;"`
        }
        type UpdatedContact struct {
            ID     uint   `json:"id;"`
            Mobile string `json:"mobile;"`
            Email  string `json:"email;"`
        }
        type NewPerson struct {
            ID        int            `gorm:"primary_key:true;"`
            Firstname string         `json:"firstname;"`
            Lastname  string         `json:"lastname;"`
            Gender    string         `json:"gender;"`
            Salary    uint           `json:salary;`
            Age       uint           `json:"age"`
            Address   UpdatedAddress `json:"address"`
            Contact   UpdatedContact `json:"contact"`
        }
        // var n []NewPerson
        n := new(NewPerson)
        if err := c.Bind(n); err != nil {
            fmt.Println(err)
            return err
        }
        // var sum uint
        query := "SELECT SUM(salary) FROM people"

        if err := db.Table("people").Select(query).Rows().Error; err != nil {
            fmt.Println("error->", err)
        }

        fmt.Println("sum->", n)
        return c.JSON(http.StatusOK, n)
    } //SELECT SUM(salary) FROM people

........

【问题讨论】:

    标签: postgresql go go-gorm go-echo


    【解决方案1】:

    你的代码的结果是什么?

    好的,如果你需要在 SQL 中求和的结果。您可以像这样使用scan,而无需声明结构。

    var sum int
    db.Table("table").Select("sum(column)").Row().Scan(&sum)
    return sum
    

    【讨论】:

    • 有没有办法在一个sql中选择&扫描多个max()?
    【解决方案2】:

    你还在 golang 中使用 struct 并在 SQL 中使用 as

    type NResult struct {
        N int64 //or int ,or some else
    }
    
    func SumSame() int64 {
        var n  NResult
        db.Table("table").Select("sum(click) as n").Scan(&n)
        return n.N
    }
    

    【讨论】:

    • 有没有办法在一个sql中选择&扫描多个max()?
    【解决方案3】:

    您不需要使用完整的 SQL 查询语法。试试改成这个

    rows, err := db.Table("people").Select("sum(salary) as total").Rows()
    for rows.Next() {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多