SQL Join重复记录

时间:2015-09-11 14:46:06

标签: sql join

我试图加入两张桌子。您将在下面注意到的一些工作是重复的。这些是我遇到问题的唯一问题。当我加入并收取溢价而不是获得100美元的预期结果时,我看到200美元。关于如何使查询不乘以* 2的任何想法?谢谢!

Tbl A

ABC123     2015-02-27     1     QQ123
ABC123     2015-02-27     1     QQ123

Tbl B

ABC123, 100

SQL:

SELECT 
    RP.POLNUMBER, RP.EFFDATE, SUM (LP.PREMIUM)
FROM 
    TBL_A RP 
INNER JOIN 
    TBL_B LP ON RP.POLNUMBER = LP.POLNUMBER
WHERE 
    RP.MOSTRECENTMODEL = 1 AND RP.POLNUMBER = 'ABC123'

2 个答案:

答案 0 :(得分:2)

您已正确识别问题。解决方案是在join

之前预先汇总数据
SELECT RP.POLNUMBER, RP.EFFDATE, LP.PREMIUM
FROM TBL_A RP INNER JOIN
     (SELECT LP.POLNUMBER, SUM(LP.PREMIUM) as PREMIUM
      FROM TBL_B
      GROUP BY LP.POLNUMBER
     ) LP
     ON RP.POLNUMBER = LP.POLNUMBER
 WHERE RP.MOSTRECENTMODEL = 1 AND RP.POLNUMBER = 'ABC123';

实际上,出于性能目的,相关子查询可能应该更好:

SELECT RP.POLNUMBER, RP.EFFDATE
       (SELECT SUM(LP.PREMIUM) as PREMIUM
        FROM TBL_B LP
        WHERE RP.POLNUMBER = LP.POLNUMBER
       ) as PREMIUM
FROM TBL_A RP 
WHERE RP.MOSTRECENTMODEL = 1 AND RP.POLNUMBER = 'ABC123';

您的过滤条件看起来很有选择性。没有理由将整个表聚合为仅返回少数策略的结果。

答案 1 :(得分:0)

如果记录是RP表,则可以使用此表,并且所有属性都是重复的。所有类似的Polnumber字段的溢价值应相同;否则结果会再次不同。

SELECT 
    RP.POLNUMBER, RP.EFFDATE, SUM (LP.PREMIUM)/COUNT(RP.POLNUMBER)
FROM 
    TBL_A RP 
INNER JOIN 
    TBL_B LP ON RP.POLNUMBER = LP.POLNUMBER
WHERE 
    RP.MOSTRECENTMODEL = 1 AND RP.POLNUMBER = 'ABC123'
GROUP BY (RP.POLNUMBER)