🧾 数据类型对照表

类型名称

类别

描述 / 用途

值范围或说明

Int8

整数

有符号 8 位整数

-128 ~ 127

UInt8

整数

无符号 8 位整数

0 ~ 255

Int16

整数

有符号 16 位整数

-32,768 ~ 32,767

UInt16

整数

无符号 16 位整数

0 ~ 65,535

Int32

整数

有符号 32 位整数

-2^31 ~ 2^31-1

UInt32

整数

无符号 32 位整数

0 ~ 4,294,967,295

Int64

整数

有符号 64 位整数

±9.2e18

UInt64

整数

无符号 64 位整数

0 ~ 18e18

Int128

整数

有符号 128 位整数(大整数)

±170e36(近似)

UInt128

整数

无符号 128 位整数

0 ~ 340e36(近似)

Int256

整数

有符号 256 位整数

极大范围

UInt256

整数

无符号 256 位整数

极大范围

Float32

浮点

32 位浮点数

±3.4e38(约7位精度)

Float64

浮点

64 位浮点数

±1.7e308(约16位精度)

Decimal(p, s)

高精度小数

精确控制小数点(如金额),p为总位数,s为小数位数(支持32/64/128/256)

例:Decimal(18, 2)

String

字符串

可变长度字符串

UTF-8 编码,理论无限长度

FixedString(N)

字符串

固定长度字符串,适合存储编码

长度为 N

UUID

字符串

128 位唯一标识符

标准 UUID 格式

Date

日期

日期,精确到天

'1970-01-01' ~ '2106-02-07'

Date32

日期

扩展日期范围版本

'1900-01-01' ~ '2299-12-31'

DateTime

日期时间

精确到秒,支持时区

1970年开始,支持秒级别

DateTime64(n)

日期时间

精确到微秒,n 表示小数位数(0~9)

纳秒精度,最多 9 位

Enum8

枚举

最多 256 个有符号枚举值(-128~127)

Enum8('男' = 1, '女' = 2)

Enum16

枚举

最多 65536 个枚举值

Array(T)

集合

数组类型,元素类型为 T

Array(String) 等

Tuple(T1, T2, ...)

集合

元组类型,多个不同类型字段

例:Tuple(Int32, String)

Map(K, V)

集合

键值对结构,键为标量类型

例:Map(String, Float64)

Nullable(T)

特殊

表示某列可以为 NULL

LowCardinality(T)

优化

用于高重复值的列,自动字典压缩优化

推荐用于重复较多的 String、Enum

Nothing

特殊

永远为 NULL 的字段(用于测试或保留列)


明细表

-- auto-generated definition
create table detail
(
    `就诊id`           String,
    `费用发生时间`     String,
    `结算id`           String,
    `定点医药机构编号` String,
    `定点医药机构名称` String,
    `人员编号`         String,
    `数量`             Decimal(10, 2),
    `单价`             Decimal(18, 2),
    `明细项目费用总额` Decimal(18, 2),
    `定价上限金额`     Nullable(Decimal(18, 2)),
    `自付比例`         Nullable(Decimal(5, 4)),
    `全自费金额`       Nullable(Decimal(18, 2)),
    `超限价自费费用`   Nullable(Decimal(18, 2)),
    `先行自付金额`     Decimal(18, 2),
    `符合范围金额`     Decimal(18, 2),
    `收费项目等级`     Nullable(String),
    `医保目录名称`     String,
    `开单医师姓名`     Nullable(String),
    `受单医师姓名`     Nullable(String),
    `报销比例`         Nullable(String)
)
    engine = MergeTree ORDER BY (`结算id`, `就诊id`, `费用发生时间`)
        SETTINGS index_granularity = 8192;

待遇表

-- auto-generated definition
create table treatment
(
    `结算id`                   String,
    `就诊id`                   String,
    `姓名`                     String,
    `性别`                     LowCardinality(String),
    `身份证号`                 String,
    `年龄`                     UInt8,
    `参保区划`                 String,
    `人员类别`                 LowCardinality(String),
    `特殊人员类别`             LowCardinality(String),
    `参保单位名称`             String,
    `定点医疗机构代码`         String,
    `定点医疗机构名称`         String,
    `医疗类别`                 LowCardinality(String),
    `入院主诊断名称`           String,
    `就诊入院时间(day)`        Nullable(String),
    `就诊出院时间(day)`        Nullable(String),
    `住院天数`                 Nullable(UInt16),
    `结算时间`                 DateTime,
    `医疗费总额`               Decimal(18, 2),
    `全自费金额`               Decimal(18, 2),
    `超限价自费费用`           Decimal(18, 2),
    `先行自付金额`             Decimal(18, 2),
    `符合范围金额`             Decimal(18, 2),
    `实际支付起付线`           Decimal(18, 2),
    `基本医疗统筹支付比例`     Decimal(5, 4),
    `基金支付总额`             Decimal(18, 2),
    `统筹基金支出`             Decimal(18, 2),
    `公务员医疗补助资金支出`   Decimal(18, 2),
    `补充医疗保险基金支出`     Decimal(18, 2),
    `大病补充医疗保险基金支出` Decimal(18, 2),
    `大额医疗补助基金支出`     Decimal(18, 2),
    `伤残人员医疗保障基金支出` Decimal(18, 2),
    `医疗救助基金支出`         Decimal(18, 2),
    `其它基金支付`             Decimal(18, 2),
    `个人支付金额`             Decimal(18, 2),
    `个人账户支出`             Decimal(18, 2),
    `范围外金额`               Decimal(18, 2),
    `现金支付金额`             Decimal(18, 2),
    `工会互助基金`             Decimal(18, 2),
    `政策范围内自付金额`       Decimal(18, 2),
    `介质类型`                 LowCardinality(String),
    `结算工作人员姓名`         String,
    `出院主诊断名称`           Nullable(String),
    `手机号码`                 Nullable(String),
    `联系方式`                 Nullable(String)
)
    engine = MergeTree ORDER BY (`结算id`, `就诊id`, `结算时间`)
        SETTINGS index_granularity = 8192;

表连接

DROP TABLE  if exists union_result;
CREATE TABLE union_result
    ENGINE = MergeTree
        ORDER BY (`结算id`, `就诊id`, `结算时间`,`费用发生时间`)
AS
SELECT DISTINCT
    a.`结算id`,
    a.`就诊id`,
    a.`姓名`,
    a.`性别`,
    a.`身份证号`,
    a.`年龄`,
    a.`参保区划`,
    a.`人员类别`,
    a.`特殊人员类别`,
    a.`参保单位名称`,
    a.`定点医疗机构代码`,
    a.`定点医疗机构名称`,
    a.`医疗类别`,
    a.`入院主诊断名称`,
    a.`就诊入院时间(day)`,
    a.`就诊出院时间(day)`,
    a.`住院天数`,
    a.`结算时间`,
    a.`医疗费总额`,
    a.`全自费金额`,
    a.`超限价自费费用`,
    a.`先行自付金额`,
    a.`符合范围金额`,
    a.`实际支付起付线`,
    a.`基本医疗统筹支付比例`,
    a.`基金支付总额`,
    a.`统筹基金支出`,
    a.`补充医疗保险基金支出`,
    a.`大额医疗补助基金支出`,
    a.`医疗救助基金支出`,
    b.`费用发生时间`,
    b.`人员编号`,
    b.`数量`,
    b.`单价`,
    b.`明细项目费用总额`,
    b.`定价上限金额`,
    b.`自付比例`,
    b.`全自费金额` as `单项目全自费金额`,
    b.`超限价自费费用` as `单项目超限价自费费用`,
    b.`先行自付金额` as `单项目先行自付金额`,
    b.`符合范围金额` as `单项目符合范围金额`,
    b.`医保目录名称`,
    b.`开单医师姓名`,
    b.`受单医师姓名`
FROM treatment a
         JOIN detail b ON a.`结算id` = b.`结算id`;