如何编写HQL实现同一员工仅展示任意一种contact_type
HiveQL实现每个员工保留任意一种联系方式的方案
下面提供两种实用的解决方案,适配你不知道每个员工具体有多少种联系方式的场景:
方法1:窗口函数ROW_NUMBER()(推荐,灵活可控)
通过按员工ID分组,给每组内的记录生成序号,然后只保留序号为1的记录即可。排序规则可以按需指定,既可以固定选某类,也可以随机选择。
SELECT Emp_id, contact_type, contact_value -- 替换为你实际需要的字段 FROM ( SELECT Emp_id, contact_type, contact_value, -- 按Emp_id分组,排序规则可选:用contact_type固定取某类,或rand()随机选 ROW_NUMBER() OVER (PARTITION BY Emp_id ORDER BY contact_type) AS rn FROM your_table_name -- 替换为你的表名 ) t WHERE rn = 1;
- 若想随机选择一种联系方式,把
ORDER BY contact_type改成ORDER BY rand()即可,每次执行结果可能不同; - 若想固定选择某类(比如按字符顺序取第一个),保持
ORDER BY contact_type即可,结果稳定。
方法2:GROUP BY结合聚合函数(简洁高效)
如果仅需要保留员工ID和任意一种联系方式类型,用聚合函数直接提取分组内的任意值即可,MAX()或MIN()会按字符顺序返回对应值:
SELECT Emp_id, MAX(contact_type) AS contact_type -- 也可替换为MIN(contact_type) -- 若需要对应联系方式值,建议用方法1,避免聚合时的字段不匹配问题 FROM your_table_name GROUP BY Emp_id;
内容的提问来源于stack exchange,提问作者Sivarathna
相关产品推荐
相关产品推荐

