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
  • 保持类型一致性
  • 避免不必要的类型转换
  • 提高代码可读性和性能
相关推荐
leisoo809715 小时前
本地股票数据深度对比ClickHouse与Parquet存储方案 IG50免费开源股票数据API接口
clickhouse·开源
A.说学逗唱的Coke3 天前
【数据库专题】ClickHouse 深度实战:从列式存储原理到 PB 级海量日志与可观测性分析
数据库·clickhouse·硬件架构
吉甫作诵9 天前
阿里云 ECS 安装 ClickHouse:密码配置、目录迁移与基础调优
大数据·clickhouse
NineData9 天前
NineData Oracle 到 ClickHouse 数据迁移完整流程:结构复制、全量装载、增量同步
数据库·clickhouse·oracle·数据迁移·ninedata·增量同步·数据迁移工具
DB哥讲数据库13 天前
【ClickHouse安装教程】从零开始部署高性能列式数据库(附ClickHouse安装包)
数据库·clickhouse
流烟默13 天前
ClickHouse三种驱动对比分析
clickhouse·驱动对比
zhoupenghui1681 个月前
ClickHouse merge引擎详解以及应用
数据库·clickhouse·merge·mergetree
ClickHouseDB1 个月前
ClickHouse 十年开源,今非昔比!
clickhouse·开源·apache
ClickHouseDB1 个月前
ClickHouse 开源十年:数据分析领域的中流砥柱
clickhouse·数据分析·开源
java_logo1 个月前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程