SQL查询各客户对应最小CustKey的Category并命名为SignupCategory的方法
需求实现方案
核心逻辑
先通过分组查询拿到每个客户(对应AgreementNumber字段)的最小CustKey,再关联回原客户表,取出该CustKey对应的Category字段重命名为SignupCategory即可。
完整可运行SQL代码
SELECT c.AgreementNumber, c.Category AS SignupCategory FROM Customer c INNER JOIN ( -- 子查询:获取每个客户对应的最小CustKey SELECT AgreementNumber, MIN(CustKey) AS MinCustKey FROM Customer GROUP BY AgreementNumber ) X ON c.AgreementNumber = X.AgreementNumber AND c.CustKey = X.MinCustKey
原有代码问题说明
- 可运行但输出CustKey的代码,问题出在输出字段选择错误:你直接将子查询返回的最小CustKey别名设置为了SignupCategory,所以输出的是数字类型的CustKey,改成取原表中对应行的Category字段重命名即可。
- 不可运行的参考代码存在两处逻辑错误:
- 子查询GROUP BY子句中额外加入了Category字段,会导致每个客户的每个分类都单独计算最小CustKey,不符合取每个客户全局最小CustKey的需求
- 关联条件错误将Category字段和CustKey做匹配,二者字段含义、类型均不匹配,无法得到正确结果
内容的提问来源于stack exchange,提问作者Daniel N
相关产品推荐
相关产品推荐

