[英]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.