我正在使用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
.....................
答案 0 :(得分:0)
您不需要使用完整的SQL查询语法。尝试更改为此
rows, err := db.Table("people").Select("sum(salary) as total").Rows()
for rows.Next() {
...
}
答案 1 :(得分:0)
代码的结果是什么?
好的,如果您需要用SQL求和的结果。您可以像这样使用scan
,而无需进行结构声明。
var sum int
db.Table("table").Select("sum(column)").Row().Scan(&result)
return sum
答案 2 :(得分:0)
您仍然在golang中使用struct
,在as
中使用SQL
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
}