clickhouse的UInt64类型(countIf() 函数返回)

countIf() 函数

countIf() 是 ClickHouse 中的一个聚合函数,用于条件计数。

bash 复制代码
countIf(condition)

功能

  • 统计满足特定条件的行数
  • 只计算条件为 true 的行
bash 复制代码
-- 统计女性用户数量
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 驱动
go 复制代码
// ClickHouse 查询
rows, err := conn.Query("SELECT total_count FROM stats")

var stats Stats
for rows.Next() {
    // 直接扫描到 uint64
    err := rows.Scan(&stats.TotalCount)
    // 无需任何额外转换
}

使用 database/sql 接口的推荐方式

go 复制代码
package main

import (
    "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 Item
    for 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
  • 保持类型一致性
  • 避免不必要的类型转换
  • 提高代码可读性和性能
相关推荐
Sayai15 小时前
ClickHouse WITH FILL 实战:监控大屏时间序列补零,附多粒度指标表与物化视图级联设计
大数据·运维·数据仓库·clickhouse·物化视图
l1t5 天前
DeepSeek总结的clickhouse的二进制文件自解压机制
clickhouse
l1t6 天前
DeepSeek总结的pg_clickhouse 与 chdb 更新:编码、嵌套与类型
数据库·clickhouse·postgresql
拔剑纵狂歌8 天前
ClickHouse system.query_log 字段详解与排障实践
后端·clickhouse·1024程序员节
SelectDB技术团队8 天前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
数据结构·数据库·clickhouse·日志·apache doris·selectdb·湖仓架构升级
SelectDB技术团队9 天前
ClickHouse 存日志的能力边界:并发、检索与 trace 回放的实测对照
数据结构·数据库·clickhouse·日志分析·apache doris·日志存储
SelectDB技术团队9 天前
Agent Trace 数据底座建设:宽表建模、全文检索与成本聚合的配置与验证步骤
大数据·python·clickhouse·elk·elasticsearch·全文检索·复杂查询
此时不提桶,更待何时9 天前
05-03-B-ClickHouse与OLAP面试与生产事故实战
clickhouse·面试·nosql
SelectDB技术团队10 天前
ELK 太占磁盘、ES 总报写入拒绝:从归因到可执行的优化清单
大数据·clickhouse·elk·elasticsearch·全文检索·复杂查询·实时更新
frjc10 天前
数据库选型:如何从众多数据库中选出最理想的那一个
redis·mysql·clickhouse·elasticsearch