如何编写SQL实现两表关联统计各状态数量获取期望查询结果
问题根因
你当前使用的是隐式内连接写法,只会返回table1中存在对应记录的状态统计结果,会丢失table2中已定义、但table1无对应数据的状态项(这类项的统计值应为0)。
修正后SQL
SELECT table2.StatusName AS StatusName, COUNT(table1.Status) AS NoOfStatus FROM testingdb.table2 LEFT JOIN testingdb.table1 ON table2.Status = table1.Status GROUP BY table2.Status, table2.StatusName;
关键调整说明
- 替换原有的逗号分隔隐式内连接为
LEFT JOIN左外连接,以存储全量状态枚举的table2作为左表,保证所有状态项都会返回,不会因为table1无匹配记录被过滤 - 分组字段改为
table2的状态ID、状态名称,兼容绝大多数数据库开启ONLY_FULL_GROUP_BY模式时的语法校验要求 - 保留
COUNT(table1.Status)的统计逻辑:左连接匹配不到table1记录时,对应字段值为NULL,COUNT会自动忽略NULL值,无匹配记录的状态统计结果会正确返回0
内容的提问来源于stack exchange,提问作者cahmad
相关产品推荐
相关产品推荐

