为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取Ent中数字列的总和

如何获取Ent中数字列的总和

Go
眼眸繁星 2022-11-28 14:38:32
我有两个表:products和baskets,它们具有M2M关系并且表名是basket_products。我正在尝试获取与特定篮子相关的products总数price和数量,但我再次陷入困境。如何修复以下代码以获得结果?注意:我正在使用Ent框架   err = client.Basket.        Query().        Where(basket.ID(2)).        WithProducts().        QueryProducts().        GroupBy("price").        Aggregate(func(selector *sql.Selector) string {            return sql.As(sql.Sum("price"), "price")        }).Scan(ctx, &r)    if err != nil {        log.Println(err)    }    log.Println(r)
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

Aggregate功能GroupBy是朋友。聚合 | 耳鼻喉科

我修改了下面给出的代码并得到了一个非常优化的SQL查询,感谢 Ent 团队。


err := client.Basket.

        Query().

        Where(basketEntity.ID(ID)).

        GroupBy(basketEntity.FieldID).

        Aggregate(func(s *sql.Selector) string {

            t := sql.Table(product.Table)

            joinT := sql.Table(basketEntity.ProductsTable)

            s.Join(joinT).

                On(s.C(basketEntity.FieldID), joinT.C(basketEntity.ProductsPrimaryKey[0]))

            s.Join(t).

                On(t.C(product.FieldID), joinT.C(basketEntity.ProductsPrimaryKey[1]))

            return sql.As(sql.Sum(t.C(product.FieldPrice)), "price")

        }).

        Aggregate(repository.Count()).

        Scan(ctx, &report)

生成的SQL:


SELECT "baskets"."id", SUM("t2"."price") AS "price", COUNT(*) 

FROM "baskets" 

JOIN "basket_products" AS "t1" ON "baskets"."id" = "t1"."basket_id" 

JOIN "products" AS "t2" ON "t2"."id" = "t1"."product_id" 

WHERE "baskets"."id" = $1 

GROUP BY "baskets"."id" args=[1]


查看完整回答
反对 回复 2022-11-28
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信