我想结合查询中的三个表 - 日期,潜在顾客和点击。联合计数或加入总和 - MySQL
的表是这样的:
日期:
|date|
铅:
id|time|commission
点击:
id|time|commission
表格日期只是存储日期,用于获取没有点击或导致的日期。
因此,如果我们有表中的以下数据:
日期:
2009-06-01
2009-06-02
2009-06-03
铅:
1|2009-06-01|400
2|2009-06-01|300
3|2009-06-03|350
点击:
1|2009-06-01|1
2|2009-06-03|2
3|2009-06-03|2
4|2009-06-03|0
我想获得日期,点击次数,由点击产生的佣金(有点击不给佣金),销售线索数量,由销售线索和佣金产生的佣金。因此,与上述我的表想获得:
2009-06-01|1|1|2|700|701|
2009-06-02|0|0|0|0|0
2009-06-03|3|4|1|350|354|
我曾尝试用下面的工会:
SELECT
campaign_id,
commission_date,
SUM(click_commission) AS click_commission,
click,
SUM(lead_commission) AS lead_commission ,
lead,
SUM(total_commission) as total_commission
FROM(
SELECT
click.campaign_id AS campaign_id,
DATE(click.time) AS commission_date,
click.commission AS click_commission,
(SELECT count(click.id) from click GROUP BY date(click.time)) as click,
0 as lead_commission,
0 as lead,
click.commission AS total_commission
FROM click
UNION ALL
SELECT
lead.campaign_id AS campaign_id,
DATE(lead.time) AS commission_date,
0 as click_commission,
0 as click,
lead.commission AS lead_commission,
lead.id as lead,
lead.commission AS total_commission
FROM lead
UNION ALL
SELECT
0 AS campaign_id,
date.date AS commission_date,
0 AS click_commission,
0 as click,
0 AS lead_commission,
0 as lead,
0 AS total_commission
FROM date
) AS foo
WHERE commission_date BETWEEN '2009-06-01' AND '2009-07-25'
GROUP BY commission_date
ORDER BY commission_date LIMIT 0, 10
但是,这并不工作,以计算点击次数和潜在客户的两个号码,代码上面给出了所有线索上适量的点击量0。如果我移动代码并从主表中选择,我会在所有的点击中获得引导权利。我一直无法找到从查询中获得两个计数的方法。
于是,我就不是一个左联接:
SELECT
date.date as date,
count(DISTINCT click.id) AS clicks,
sum(click.commission) AS click_commission,
count(lead.id) AS leads,
sum(lead.commission) AS lead_commission
FROM date
LEFT JOIN click ON (date.date = date(click.time))
LEFT JOIN lead ON (date.date = date(lead.time))
GROUP BY date.date
LIMIT 0 , 30
与此查询的问题是,如果有一个以上的点击,或者导致一个日期,将返回预期值* 2。所以2009年-06-01它将返回1400,而不是预期的700美元,作为牵头佣金。
所以在UNION中,我遇到了计数问题,在左边的连接中,它是SUM不工作。
如果可能的话,我真的想坚持UNION,但我还没有找到一种方法从它得到两个计数。
(这是后续的this之前的问题,但由于我没有要求计数,因此我发布了一个新问题。)
如果有人知道了解决UNION ALL我会非常渴望知道解决方案,因为该联盟更多容易与LEFT JOIN合作。 – boingboing 2009-07-09 14:37:05