1 回答
TA贡献1869条经验 获得超4个赞
您可以使用subQuery
var data []SlimeResponse
db := service.gormdb
subQueryHoldingOn := db.
Select("count(rnIg)").
Where("rnSquidStatus = 'In system' AND rnSmId = ?", smId).
Table("ruins")
subQueryInSystem := db.
Select("count(rnIg)").
Where("rnSquidStatus = 'Holding on' AND rnSmId = ?", smId).
Table("ruins")
groupSubQueryHoldingOn := db.
Select("GROUP_CONCAT(rnIg)").
Where("rnSquidStatus = 'In system' AND rnSmId = ?", smId).
Table("ruins")
groupSubQueryInSystem := db.
Select("GROUP_CONCAT(rnIg)").
Where("rnSquidStatus = 'Holding on' AND rnSmId = ?", smId).
Table("ruins")
db = db.Select("smId as slimeId, slStatus, slPPIV, slHighRiskSituation, (?) as holdingOn, (?) as inSystem, smSuspectedCorona, IF(smStatusClosed != 0, 1, 0) as statusClosed, smSurge, (?) as ruinsOnHold, (?) as ruinsInSystem", subQueryHoldingOn, subQueryInSystem, groupSubQueryHoldingOn, groupSubQueryInSystem)
db = db.Where("smId != ?", 0).Group("smId ").Having("smId > ?", 0)
db = db.Table("slimes").Find(&data)
或者
可以直接传入select部分Select
var data []SlimeResponse
db := service.gormdb
db = db.Select(
`
smId AS 'slimeId',
slStatus,
slPPIV,
slHighRiskSituation,
(
SELECT count(rnIg) FROM ruins WHERE rnSquidStatus = 'Holding on' AND rnSmId = ?
) AS 'holdingOn',
(
SELECT count(rnIg) FROM ruins WHERE rnSquidStatus = 'In system' AND rnSmId = ?
) AS 'inSystem',
smSuspectedCorona,
IF(smStatusClosed != 0, 1, 0) as statusClosed,
smSurge,
(
SELECT GROUP_CONCAT(rnName) FROM ruins WHERE rnSquidStatus = 'Holding on' AND rnSmId = ?
) as 'ruinsOnHold',
(
SELECT GROUP_CONCAT(rnName) FROM ruins WHERE rnSquidStatus = 'In system' AND rnSmId = ?
) as 'ruinsInSystem'
`, smId, smId, smId, smId
)
db = db.Where("smId != ?", 0).Group("smId ").Having("smId > ?", 0)
db = db.Table("slimes").Find(&data)
- 1 回答
- 0 关注
- 204 浏览
添加回答
举报