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
  • 保持类型一致性
  • 避免不必要的类型转换
  • 提高代码可读性和性能
相关推荐
言之。2 天前
Python调用DeepSeek API查询ClickHouse
windows·python·clickhouse
zhglhy3 天前
ckman将单节点ClickHouse转为集群方案
clickhouse·ckman
葡萄月令with蒲公英4 天前
使用clickhouse_connect从csv导入数据到clickhouse报错
clickhouse
韩金群6 天前
centos离线安装配置clickhouse
linux·clickhouse·centos
谷新龙0019 天前
pg_clickhouse插件,在postgresql中借助clickhouse借用OLAP能力
数据库·clickhouse·postgresql
wending-Y9 天前
clickhouse 物化视图数据查询不稳定分析
clickhouse
l1t12 天前
PostgreSQL pg_clickhouse插件的安装和使用
数据库·clickhouse·postgresql·插件
honder试试13 天前
Springboot实现Clickhouse连接池的配置和接口查询
spring boot·后端·clickhouse
Mr_wilson_liu13 天前
通过DBeaver22.0.5 连接数据库ck(clickhouse)、pg(postgres)
数据库·clickhouse
波波仔8615 天前
clickhouse表存储引擎
clickhouse·表存储引擎