Join和Group by Clause提供了错误的输出

时间:2013-10-07 07:06:19

标签: mysql sql join group-by

我有两个表L列(Code,Qtr,Fy,Limit)和R with(Code,Qtr,Fy,Limit)。我希望按代码得到左右表组的限制,Qtr和Fy

以下查询运行时没有错误但输出错误,任何人都可以帮助我获得正确的输出。如果我只使用一个表,它可以正常工作。我猜问题是加入

select L.Code, L. Qtr, L.FY, sum(L.limit),sum(R.Limit) 
from tbl L,tbl R Where
L.Code=R.Code AND
L.Qtr=R.Qtr AND
L.FY=R.FY
group by L.Code,L.Qtr,L.FY

示例数据(该表还包含其他列,但此处我只保留选中)

Tbl L                                        
Code    Qtr,   Fy   Limit                    
001      1      70    200                     
001      1      70    700                     
001       2     70    500    
001       2     70    300

Table R

Code     Qtr    Fy    Limit

001      1       70    1000

001      1       70    200

001      2       70    50

001      2       70    125


Result

Code   Qtr    Fy  Sum(l.Limit)    sum(R.Limit)

001     1     70   900               1200

001     2     70   800               175      

我正在使用Mysql

2 个答案:

答案 0 :(得分:1)

尝试此查询:

select code, qtr, fy, sum(lsum), sum(rsum)
from (
select L.Code, L.Qtr, L.FY, L.limit as lsum, 0 as rsum
from L
union all
select R.Code, R.Qtr, R.FY, 0 as lsum, R.limit as rsum
from R) as combined
group by code, qtr, fy

在这种情况下使用join是一个错误的想法,因为它会创建多个记录(L和R之间的每个匹配一个记录),然后当你执行sum时会得到不正确的结果。< / p>

答案 1 :(得分:1)

问题确实是加入 - 特别是,当您在加入时使用GROUP BY 时,当加入条件导致非唯一行时,您遇到了问题。通常,解决此问题的方法是在>之前对进行分组:

SELECT L.code, L.qtr, L.fy, L.lim as L_lim, R.lim as R_lim
FROM (SELECT code, qtr, fy, SUM(lim) as lim
      FROM L
      GROUP BY code, qtr, fy) L
JOIN (SELECT code, qtr, fy, SUM(lim) as lim
      FROM R
      GROUP BY code, qtr, fy) R
  ON R.code = L.code
     AND R.qtr = L.qtr
     AND R.fy = L.fy

(有一个working SQL Fiddle example

请注意,这只会显示两个表中的行的结果。此外,LIMIT是一个保留字(在MySQL和其他一些RDBMS中),因此最好避免使用列名。