Mysql连接查询

时间:2011-12-03 17:15:33

标签: 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”上,结果我得到以下列表:

   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

如何使用一个查询执行此操作? 感谢所有建议。

1 个答案:

答案 0 :(得分:1)

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

我认为字段datedatetime类型。最好在最终结果集中格式化输出字段(在这种情况下为date字段)。

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