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
  • 保持类型一致性
  • 避免不必要的类型转换
  • 提高代码可读性和性能
相关推荐
MARSERERER2 天前
ClickHouse迁移Starrocks脚本工具
starrocks·clickhouse
赤月幼狼2 天前
clickhouse学习笔记(一)基础概念与架构
笔记·学习·clickhouse
草明3 天前
clickhouse 检查是否有删除语句在执行
数据库·clickhouse
StarRocks_labs3 天前
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
starrocks·clickhouse·存算分离·ubt架构·湖仓查询
大数据007 天前
CLICKHOUSE分布式表初体验
分布式·clickhouse
言之。7 天前
ClickHouse 数据更新策略深度解析:突变操作与最佳实践
服务器·数据库·clickhouse
ll57764433210 天前
解析PyTorch张量操作从基础重塑到高级自动微分技术
clickhouse
言之。11 天前
ClickHouse MCP
clickhouse
weixin_3077791311 天前
Clickhouse导出库的表、视图、用户和角色定义的SQL语句
开发语言·数据库·算法·clickhouse·自动化
SelectDB技术团队11 天前
Apache Doris 与 ClickHouse:运维与开源闭源对比
运维·clickhouse·apache