網頁

2022/12/24

Golang GORM 查詢count筆數 select count

Go使用GORM ORM套件做select count筆數查詢的方式如下。


範例環境:

  • Go 1.19
  • GORM 2.0 (gorm.io/gorm v1.24.2)
  • PostgreSQL 14


事前要求

參考「Golang GORM PostgreSQL基本設定」設定資料庫及安裝GORM套件。

參考「Golang GORM 條件查詢」了解GORM的where查詢。


範例

GORM使用gorm.DB.Count(count *int64)查詢筆數;參數count *int64為接收count結果的pointer變數。在前使用gorm.DB.Model指定查詢的model資料表。

搭配gorm.DB.Find同時查詢資料及筆數,但實際上是兩次select,可直接用len取得查詢結果的slice長度即可。

main.go

package main

import (
    "fmt"
    "time"

    "gorm.io/driver/postgres"
    "gorm.io/gorm"
    "gorm.io/gorm/schema"
)

type Employee struct {
    ID        int64     // primary key, column name is `id`
    Name      string    // column name is `name`
    Age       int       // column name is `age`
    CreatedAt time.Time // column name is `created_at`
}

const (...)

func getGormDB() *gorm.DB {...}

func main() {
    db := getGormDB()

    var count int64
    db.Model(&Employee{}).Where("age > ?", 30).Count(&count) // SELECT count(1) FROM employee WHERE age > 30;
    fmt.Println(count)                                       // 2

    emps := []Employee{}
    db.Where("age > ?", 30).Find(&emps).Count(&count)
    fmt.Println(emps)  // [{3 tony 45 2022-12-22 22:05:09.83327 +0000 UTC} {1 john 33 2022-12-22 21:56:37.061419 +0000 UTC}]
    fmt.Println(count) // 2
}


沒有留言:

張貼留言