Как получить сумму столбца зарплаты из таблицы GORM
Я использую 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
..............................
1 ответ
Каков результат вашего кода?
Хорошо, если вам нужен результат суммы в SQL. Вы можете использоватьscan
как это без объявления структуры.
var sum int
db.Table("table").Select("sum(column)").Row().Scan(&result)
return sum
Вы все еще используете 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
}
Вам не нужно использовать полный синтаксис SQL-запроса. Попробуй сменить на это
rows, err := db.Table("people").Select("sum(salary) as total").Rows()
for rows.Next() {
...
}