Aggregations and Grouping
Agregatsiya va guruhlash
Alohida yozuvlarni emas, ular haqidagi statistikani (jami, o'rtacha, soni) olish kerak bo'lganda, GORM Select, Group va Scanni birlashtiradi.
type CategoryTotal struct {
Category string
Total int
Count int
}
var results []CategoryTotal
db.Model(&Order{}).
Select("category, SUM(price) as total, COUNT(*) as count").
Group("category").
Scan(&results)
for _, r := range results {
fmt.Println(r.Category, r.Total, r.Count)
}Bu yerda natija to'g'ridan-to'g'ri Order modeliga emas, alohida kutish natijasi struct'iga (CategoryTotal) yoziladi — chunki SUM/COUNT natijasi haqiqiy Order qatoriga o'xshamaydi. Scan (Finddan farqli) — bu maxsus, model bo'lmagan natijalar uchun ishlatiladi. Select bilan xom SQL ifodasini (SUM(price) as total) yozish mumkin — bu GORM'ning "avtomatik" qismidan chiqib, to'g'ridan-to'g'ri SQL yozish nuqtasi.
Key Takeaway
Key Takeaway:
Select + Group + Scan — agregatlangan statistikani (yig'indi, soni, o'rtacha) alohida natija struct'iga olish uchun ishlatiladi.
NEXT UP
Scopes and Joins