go gorm select 用了group by和order by,返回的数据与原struct 类型不同,导致返回数据无用,求大佬指点?
以下是我的数据库中一个表的 struct 信息,是服务告警信息:
type Alarm struct {
gorm.Model
EventId string
AlarmTime time.Time
Priority int
Status string
TplId int
StraId int
ExpId int
Metric string
Tags string
LeftValue string
RightValue string
Endpoint string
Step int
Note string `gorm:"size: 500"`
Pdl string
Domain string
Path string
Cluster string
}
我对数据库的一个字段进行了Group by操作
func (topTime TopfiveTime) GetIncidentsfive(mark string) []Alarm{
var topFiveList []Alarm
topStartTime, _ := parseWithLocation("Asia/Shanghai", topTime.StartTime)
topEndTime, _ := parseWithLocation("Asia/Shanghai", topTime.EndTime)
db.Select(mark + ",count(*) AS mark_cnt").
Where("status = 'problem' AND created_at BETWEEN ? AND ?",topStartTime, topEndTime).
Group(mark).
Order("mark_cnt DESC").
Limit(6).
Find(&topFiveList)
fmt.Println(topFiveList)
return topFiveList
}
上述函数是执行select SQL的语句,在数据库执行结果如下:
但是,由于生成的结果与Alarm struct不一致了,导致返回的信息是一些不可用数据(原Alarm 数据表中的无用数据),
求大佬解释如何能正确返回所需要的信息,如数据库展示的那样?
在定义一个结构体,
type Statistics struct{
}
var statistics []Statistics
查询语句用
db.TableName("alarms").Select(mark + " as mark,count(*) AS mark_cnt").