SQL关联Status_Codes表获描述,无需将描述列加入分组的方法
解决方案
方法一:先聚合再关联(推荐)
先对TRANSACTIONS表按status分组统计总数,再左连接Status_Codes表获取对应描述。这种方式既避免了在聚合阶段处理描述字段,也无需修改GROUP BY子句:
SELECT t.status, sc.description, t.total FROM ( SELECT status, COUNT(*) AS total FROM TRANSACTIONS WHERE status != 1 GROUP BY status ) t LEFT JOIN Status_Codes sc ON t.status = sc.status
逻辑说明:
- 子查询先完成统计,得到每个
status对应的记录数total - 外层通过左连接关联
Status_Codes,匹配对应描述,未匹配到的状态(如3、4)会返回null,与原查询结果一致
方法二:用聚合函数包裹描述字段
如果不想使用子查询,可以用MAX()或MIN()这类聚合函数包裹sc.description。由于每个status在Status_Codes中最多对应一条描述(或无匹配),聚合后不会改变结果,同时满足GROUP BY的语法要求:
SELECT t.status, MAX(sc.description) AS description, COUNT(*) AS total FROM TRANSACTIONS t LEFT JOIN Status_Codes sc ON t.status = sc.status WHERE t.status != 1 GROUP BY t.status
内容的提问来源于stack exchange,提问作者user20622377
相关产品推荐
相关产品推荐

