【问题标题】:Getting total SUM from has many从中获取总和有很多
【发布时间】:2021-09-24 12:48:28
【问题描述】:

我有两个表,在查询 Product 表并为每个单独的产品显示时,我试图找出一种方法来获取 Order 表中 Ordered 列的 SUM。

这是我目前获取所有产品的方式,我想扩展它以在查询时计算字段,或者如果可能的话,使用 PostgreSQL 的生成列函数。以为我不确定它是否可以在这种情况下与外键一起使用。

type Product struct {
    gorm.Model
    Orders      []Order `gorm:"ForeignKey:ProductID" json:"orders"`
}

type Order struct {
    gorm.Model
    ProductID   uint   `json:"productID"`
    Ordered     int8   `gorm:"default:0" json:"ordered"`
}


func GetProducts(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    var products []Product
    db.Preload("Orders").Find(&products)
    json.NewEncoder(w).Encode(products)
}

我认为 SQL 查询是这样的(不太了解 SQL)

select *, ( select sum(ordered) from orders where product_id = products.id) ordered from products;

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    我能够使用以下方法解决它。

    func GetProducts(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json")
        var products []Product
        subQuery := db.Select("SUM(ordered) as ordered").Where("product_id = products.ID").Table("orders")
        db.Select("*, (?)", subQuery).Preload("Orders").Find(&products)
        json.NewEncoder(w).Encode(products)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2018-12-10
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      相关资源
      最近更新 更多