SAP HANA数据库如何实现左连接后取最大qty对应的no字段
SAP HANA 需求实现SQL方案
你提到的简化写法适配
你示例的MAX(qty).NO原生语法SAP HANA不支持,但可以用HANA支持的KEEP子句实现同等简洁的写法,无需嵌套子查询:
SELECT B.id, B.user, MAX(A.no) KEEP (DENSE_RANK FIRST ORDER BY A.qty DESC) AS no FROM B LEFT JOIN A ON B.user = A.user GROUP BY B.id, B.user;
逻辑说明:先按每个用户的qty倒序排序,取排名第一的行对应的no值,若存在多个行qty同为最大值,会取最大的no,可根据业务需求将MAX(A.no)替换为MIN(A.no)调整取值规则。
注意:
USER是SAP HANA内置保留关键字,如果你的字段实际命名为USER,执行时需要用双引号包裹字段名(例如A."USER")避免语法报错。
通用窗口函数实现方案
如果需要兼容多数据库场景,或者需要更灵活的排序规则,可使用窗口函数实现:
SELECT t.id, t.user, t.no FROM ( SELECT B.id, B.user, A.no, ROW_NUMBER() OVER (PARTITION BY B.user ORDER BY A.qty DESC) AS rn FROM B LEFT JOIN A ON B.user = A.user ) t WHERE t.rn = 1 OR t.no IS NULL;
逻辑说明:按用户分组后按qty倒序排序取每组第一条,同时保留B表有但A表无匹配的左连接结果。如果需要返回同一个用户所有qty为最大值的记录,可将ROW_NUMBER()替换为RANK()。
输出结果
两种写法基于你提供的示例数据都会返回预期结果:
| id | user | no |
|---|---|---|
| 1 | 用户A | 11 |
| 2 | 用户B | 12 |
内容的提问来源于stack exchange,提问作者YuTing
相关产品推荐
相关产品推荐

