You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Hive查询语句:关联客户表与账户表并聚合账户号

嘿,这个需求很常见,用Hive的分组聚合函数就能完美解决,我给你一步步说明:

原始表数据

首先先明确你的两张表的结构和数据:

Client表

id,name,salary
1 ,John, 10000
2 ,Melissa, 5000

Account表

id,account_number,client_id
1 ,00920202, 1
2 ,00920203, 1
3 ,00920204, 1
4 ,00920205, 2
5 ,00920206, 2

实现查询语句

直接用这条Hive SQL就能得到你想要的结果:

SELECT 
    c.id,
    c.name,
    c.salary,
    CONCAT('{', CONCAT_WS(', ', COLLECT_SET(a.account_number)), '}') AS accounts
FROM Client c
LEFT JOIN Account a ON c.id = a.client_id
GROUP BY c.id, c.name, c.salary
ORDER BY c.id;

语句细节解释

  • 表关联:用LEFT JOIN关联两张表,这样哪怕有客户没有对应的账户记录(你的示例里没有这种情况,但做个兜底),也能正常出现在结果里,不会被过滤掉。
  • 聚合账户号:COLLECT_SET(a.account_number)会把同一个客户下的所有账户号去重后收集成一个集合数组;如果你的业务允许同一个客户有重复账户号,把COLLECT_SET换成COLLECT_LIST就行。
  • 格式调整:先用CONCAT_WS(', ', ...)把数组里的元素用「逗号+空格」分隔成字符串,再用CONCAT给这个字符串前后加上大括号,正好匹配你要的{xxx, xxx, xxx}格式。
  • 分组与排序:按Client的id、name、salary分组(因为这三个是每个客户的唯一标识字段),最后按id排序,保证结果顺序和你给出的示例一致。

内容的提问来源于stack exchange,提问作者Nabil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:27:38