如何在ClickHouse中合并同一手机号的多行数据为单行?
ClickHouse 同手机号多记录字段合并查询
现有一张Customer表,数据来自多个不同数据源,导致同一手机号对应多条记录,每条记录仅包含部分非空字段(无法使用Update操作,因为无法获取全量字段)。表中数据如下:
| Phone | Name | City | |
|---|---|---|---|
| 998307900 | test@gmail.com | ||
| 998307900 | Tashkent | ||
| 998307900 | Stefany | ||
| 998307900 | Stef |
需要将同一手机号的所有非空字段合并为单行,最终得到如下结果:
| Phone | Name | City | |
|---|---|---|---|
| 998307900 | test@gmail.com | Stefany | Tashkent |
查询语句
SELECT Phone, any(Email) AS Email, max(Name) AS Name, any(City) AS City FROM Customer GROUP BY Phone
逻辑说明
any()函数返回字段中的第一个非空值,适合Email、City这类唯一属性字段;max(Name)通过字符串字典序比较,保留示例中更完整的"Stefany"而非"Stef";如果需要按数据插入顺序取最后一个非空名称,可替换为anyLast(Name);- 按Phone分组,实现同手机号下多记录的字段合并,新增字段只需复用对应聚合逻辑即可。
内容的提问来源于stack exchange,提问作者Art Cul
相关产品推荐
相关产品推荐

