clickhouse的UInt64类型(countIf() 函数返回)
countIf() 函数
countIf() 是 ClickHouse 中的一个聚合函数,用于条件计数。
countIf(condition)
功能
- 统计满足特定条件的行数
- 只计算条件为 true 的行
-- 统计女性用户数量
SELECT countIf(gender = 'female') as female_count FROM users-- 统计成功的请求数
SELECT countIf(status = 'success') as successful_requests FROM logs
在 ClickHouse 中,countIf() 函数返回的是 UInt64 类型。
clickhouse的UInt64类型
- Go 的 uint64 类型可以直接对应 ClickHouse 的 UInt64
- 使用 sql.NullInt64 可以安全处理可能的 NULL 值
- 建议进行类型转换和边界值检查
- 使用 github.com/ClickHouse/clickhouse-go/v2 作为推荐的 ClickHouse Go 驱动
// ClickHouse 查询
rows, err := conn.Query("SELECT total_count FROM stats")var stats Stats
for rows.Next() {// 直接扫描到 uint64err := rows.Scan(&stats.TotalCount)// 无需任何额外转换
}
使用 database/sql 接口的推荐方式
package mainimport ("database/sql""fmt"_ "github.com/ClickHouse/clickhouse-go/v2"
)type Item struct {ID sql.NullInt64 `ch:"id"` // 推荐使用 sql.NullInt64 处理可能的 NULL 值
}func main() {// 使用 sql.NullInt64 安全接收可能为 NULL 的 UInt64 值rows, err := db.Query("SELECT id FROM items")if err != nil {// 错误处理}defer rows.Close()var item Itemfor rows.Next() {err := rows.Scan(&item.ID)if err != nil {// 错误处理}if item.ID.Valid {fmt.Printf("Valid UInt64 ID: %d\n", item.ID.Int64)} else {fmt.Println("NULL value encountered")}}
}
- 除非有特殊业务需求,否则直接使用 uint64
- 保持类型一致性
- 避免不必要的类型转换
- 提高代码可读性和性能