MySQL如何取另一表唯一值关联并避免统计结果重复?
问题原因分析
- 第一个查询的统计逻辑不符合需求:你在
GROUP BY中加入了suitno(案件编号)字段,最终统计结果是每个案件下对应律师的关联次数,不是单个律师的全量案件总数。 - 第二个查询出现重复计数的核心原因:
cp_counsel表存在同一enrolment_number对应多条重复记录的情况,直接关联时,每条重复的律师记录都会和cp_cases_counsel中对应的案件记录匹配,最终COUNT结果等于真实案件数乘以该律师在cp_counsel表的重复条数,你遇到的两倍结果就是因为对应律师均存在2条重复记录。
正确实现方案
实现思路:先对cp_counsel表按enrolment_number去重得到唯一律师映射表,再和案件表关联统计,参考SQL如下:
SELECT A.enrolment_number AS id, A.counsel, COUNT(T.counsel_id) AS total FROM ( -- 先对律师表按执业编号去重,取每个执业号对应的唯一律师名称 SELECT enrolment_number, MIN(counsel) AS counsel FROM cp_counsel GROUP BY enrolment_number ) A -- 如果不需要统计0案件的律师,可将LEFT JOIN改为INNER JOIN LEFT JOIN cp_cases_counsel T ON A.enrolment_number = T.counsel_id GROUP BY A.enrolment_number, A.counsel
内容的提问来源于stack exchange,提问作者Korlahwarleh
相关产品推荐
相关产品推荐

