Как получить сумму числового столбца в Ent
У меня есть две таблицы: и
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)
2 ответа
В
Aggregate
а также
GroupBy
функции - друзья. Агрегация | Энт
Я изменил код, как показано ниже, и получил очень оптимизированный запрос, благодаря команде 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]
Вы пытались изменить
GroupBy("price")
к
GroupBy(Basket.FieldPrice)
т.е. обращение к полям по сгенерированному имени поля. Пример Group By Edge должен быть похож на https://entgo.io/docs/aggregate/