加入两个表的MySQL,但我不知道什么类型

时间:2018-08-18 21:11:11

标签: mysql

我是数据库新手。我知道一些关系,例如:左联接,右联接等

但是我不知道我到底需要什么才能获得期望的输出,所以这是我的两个表:

交易

transaction_id | date       | amount | user_id
---------------+------------+--------+----------
      1        | 2018-08-18 |   100  | 1
      2        | 2018-08-18 |   100  | 1
      3        | 2018-08-19 |   100  | 2

用户

user_id | name  | email           | password
--------+-------+-----------------+-----------
   1    | alice | alice@email.com | xxx
   2    | smith | smith@email.com | xxx

因此交易表存储了用户所做的交易。

我想这样输出:

date       | SUM(amount) | user_id
-----------+-------------+---------
2018-08-18 |     200     | 1
2018-08-18 |       0     | 2
2018-08-19 |       0     | 1
2018-08-19 |     100     | 2

这是我尝试过的查询:

select 
    transaction.date, 
    sum(transaction.amount), 
    user.user_id 
from 
    transaction 
left join 
    user on user.user_id = transaction.user_id 
group by 
    date, user.user_id

预先感谢

2 个答案:

答案 0 :(得分:0)

SELECT date,
(
  SELECT COALESCE(SUM(transaction.amount), 0)
  FROM transaction
  WHERE
    transaction.user_id = user_ids.user_id
  AND
    OuterTable.date = transaction.date
) as amount,
user_ids.user_id
FROM transaction OuterTable,
     (SELECT user_id FROM user) user_ids
GROUP By date, user_ids.user_id

您可以在此处进行检查:http://sqlfiddle.com/#!9/29ee67/9

答案 1 :(得分:0)

如果您只想了解每个用户每天的交易总额,则只需执行以下操作:

SELECT 
    t.date,
    sum(t.amount) as amount,
    t.user_id
FROM 
    transactions t
GROUP BY
    t.date, t.user_id

除非您要输出用户名或其他用户的信息,否则您无需执行联接,因为此表中已有此信息。

截至目前,在该特定日期为没有交易的用户输出0作为总和,请考虑以下问题:如果您有100个用户,则每天会有100行。一个月内有3000行。为每个用户创建另一行。这可以成倍增长。因此,请仔细地线程。 :)