Mysql连接查询

标签 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

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

最佳答案

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类型。最好在最终结果集中设置输出字段的格式(在本例中为日期字段)。

您的查询没问题,他们需要的只是加入

关于Mysql连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369407/

相关文章:

mysql - 无法在两个表之间创建关系

java - 为什么我不能在 MySQL 的准备语句中设置变量?

c# - mysql 从存储过程调用系统命令不起作用

javascript - Sails.js 对关联值的查询

mysql - 我的 Tickets 表应该使用什么数据类型?

mysql - 具有权限的 mysql 用户不可见数据库

mysql - 从最后一项中选择信息并加入总数

php 和 mysql 增删改查问题

java - Oracle DB表与 View (物化 View )的关系

mysql - 将 sql 转储导入 mySQL Workbench 时出现错误 1305