【发布时间】:2014-12-19 11:30:29
【问题描述】:
我很困惑!我有 3 个表格,分别为我提供了我正在寻找的结果。当我加入它们(尝试加入、联合、左加入、子查询)时,我得到了倾斜的结果。
表 1:
SELECT DISTINCT JB.job_id, AR.job_id as jid, SUM(AR.ar_payment_amount) AS sum,
JB.marketing_campaign FROM job_tbl JB LEFT JOIN ar_payment_tbl AR ON JB.job_id =
AR.job_id WHERE JB.marketing_campaign != '' AND FROM_UNIXTIME(AR.ar_payment_date,'%Y') =
YEAR(NOW()) GROUP BY JB.marketing_campaign ORDER BY sum DESC LIMIT 10
这给了我正在寻找的结果(仅显示此示例的一个结果)
[job_id] => 551
[jid] => 551
[sum] => 124440.97024536133
[marketing_campaign] => Roto Rooter
表 2:
SELECT DISTINCT JB.job_id, AP.job_id, SUM(price) AS price, AP.vendor FROM job_tbl JB
LEFT JOIN ap_tbl AP ON JB.job_id = AP.job_id WHERE AP.marked_as_paid = 1 AND
AP.activity = 'Commission' AND FROM_UNIXTIME(AP.payment_date,'%Y') = YEAR(NOW()) GROUP
BY vendor ORDER BY price DESC LIMIT 10
这给了我正在寻找的结果...
[job_id] => 551
[price] => 5700
[vendor] => 436
现在当我加入他们时,我会得到不同的结果
SELECT DISTINCT JB.job_id, AR.job_id as arid, AP.job_id as apid,
SUM(AR.ar_payment_amount) AS sum, SUM(AP.price) AS price, JB.marketing_campaign FROM
job_tbl JB LEFT JOIN ap_tbl AP ON JB.job_id = AP.job_id AND AP.marked_as_paid = 1 AND
AP.activity = 'Commission' LEFT JOIN ar_payment_tbl AR ON JB.job_id = AR.job_id AND
FROM_UNIXTIME(AR.ar_payment_date,'%Y') = YEAR(NOW()) WHERE AP.price != '' AND
AR.ar_payment_amount != '' AND JB.marketing_campaign != '' GROUP BY
JB.marketing_campaign ORDER BY sum DESC LIMIT 10
这是我得到的结果
[job_id] => 551
[arid] => 551
[apid] => 551
[sum] => 130507.02011108398
[price] => 8200
[marketing_campaign] => Roto Rooter
结果应该是这样的
[job_id] => 551
[arid] => 551
[apid] => 551
[sum] => 124440.97024536133
[price] => 5700
[marketing_campaign] => Roto Rooter
任何帮助都将不胜感激,这个项目于上周五到期! ;-)
【问题讨论】:
标签: mysql join sum left-join union