亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取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 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號