SQL原生查询转GORM实现咨询:Clause与条件选择困惑
GORM实现分组统计查询的方案
你的这条SQL是典型的分组聚合查询,不需要用到复杂的Clause,直接用GORM的链式API就能搞定,核心用到Select、Group、Order这几个方法,完全匹配原SQL的逻辑。
步骤1:定义结果接收结构体
先定义一个结构体来接收统计结果,字段和SQL里的别名对应:
type CollectionStats struct { Collection string `gorm:"column:collection"` ItemCount int64 `gorm:"column:item_count"` }
步骤2:执行查询
如果你的项目里已经定义了对应collections表的模型(比如Collection),可以用Model方法关联;如果没有,直接用Table指定表名即可:
方式一:使用模型关联查询
var stats []CollectionStats db.Model(&Collection{}). Select("collection, count(*) as item_count"). Group("collection"). Order("item_count desc, collection"). Find(&stats)
方式二:直接指定表名查询
var stats []CollectionStats db.Table("collections"). Select("collection, count(*) as item_count"). Group("collection"). Order("item_count desc, collection"). Find(&stats)
补充说明
这里的Select对应SQL里的字段选择,Group实现分组逻辑,Order完全照搬原SQL的排序规则,整个链式调用和原SQL的结构一一对应,属于GORM最常用的常规查询场景,不需要额外借助Clause来实现。
内容的提问来源于stack exchange,提问作者oyilmaztekin
相关产品推荐
相关产品推荐

