簡體   English   中英

如何使用gorm進行條件聚合?

[英]How to make conditional aggregation using gorm?

我想做一個條件聚合,以便將列的一些值匯總到不同的列中。 數據是這樣的:

ID 數量 地位
1 100 確認的
1 50 確認的
1 50 未經證實
1 10 未經證實

我想讓它像這樣:

確認的 未經證實 全部的
150 60 210

目前,我可以通過使用原始 SQL 來做到這一點

SELECT
  sum(amount) FILTER (WHERE status = 'confirmed') AS confirmed,
  sum(amount) FILTER (WHERE status = 'unconfirmed') AS unconfirmed,
  sum(amount) AS total
FROM table_name
WHERE id = 1

如何使用 gorm 進行此查詢?

這是你期待的嗎?


import (
    "fmt"

    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

type Res struct {
    Confirmed   int
    Unconfirmed int
    Total       int
}

func main() {
    sql := "select sum(if (status = 'confirmed', amount, 0)) as confirmed ,sum(if (status = 'unconfirmed', amount, 0)) as unconfirmed, sum(amount) as total from m_73627615 where id = 1"
    dsn := fmt.Sprintf("%s:%s@(%s:3306)/%s?charset=utf8&parseTime=True", "", "", "", "")
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }

    var r Res
    _ = db.Raw(sql).Scan(&r).Error

    fmt.Println(r)
    // {150 60 210}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM