我在数据库中使用了两个表。这些表看起来像这样:
表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
如何使用一个查询执行此操作? 感谢所有建议。
答案 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
我认为字段date
是datetime
类型。最好在最终结果集中格式化输出字段(在这种情况下为date
字段)。
您的查询很好,他们需要的是join
。