2011-12-03 150 views
0

我在数据库中使用两个表。这些表是这样的:Mysql加入查询

表A:

id | date 
---------------------- 
    12001 | 2011-01-01 
    13567 | 2011-01-04 
    13567 | 2011-01-04 
    11546 | 2011-01-07 
    13567 | 2011-01-07 
    18000 | 2011-01-08 

表B:

user | date  | amount 
---------------------------------- 
    15467 | 2011-01-04 | 140 
    14568 | 2011-01-04 | 120 
    14563 | 2011-01-05 | 140 
    12341 | 2011-01-07 | 140 
    18000 | 2011-01-08 | 120 

我需要一个查询,将连接这两个表。

第一个查询应该导致表A中按用户分组的用户总数以及按日期分组的表A中唯一用户的数量。该查询看起来像:

SELECT COUNT(DISTINCT id) AS uniq, COUNT(*) AS total, format_date(date, '%Y-%m-%d') as date FROM A GROUP BY date 

从第二张表格,我需要按日期分组的量的总和。 该查询看起来像:

SELECT SUM(amount) AS total_amount FROM B GROUP BY DATE_FORMAT(date, '%Y-%m-%d') 

我想要做的就是这两个查询合并成一个上栏“日期”,并作为一个结果,我得到以下列表:

date  | unique | total | amount 
----------------------------------------------- 
2011-01-01 |  1  |  1 |  0 
2011-01-04 |  1  |  2 | 260 
2011-01-05 |  0  |  0 | 140 
2011-01-07 |  2  |  2 | 140 
2011-01-08 |  1  |  1 | 120 

我如何使用一个查询来做到这一点? 感谢您的所有建议。

回答

0
select date_format(a.date, '%Y-%m-%d') as date, a.uniq, a.total, ifnull(b.amount, 0) as amount 
from ( 
    select count(distinct id) as uniq, count(*) as total, date 
    from tablea 
    group by date 
) a 
left join (
    select sum(amount) as amount, date 
    from tableb 
    group by date 
) b on a.date = b.date 
order by a.date 

我假定字段date是一个datetime类型。最好在最终结果集中格式化输出字段(在这种情况下为date字段)。

您的查询很好,他们需要的是一个join