我是数据库新手。我知道一些关系,例如:左联接,右联接等
但是我不知道我到底需要什么才能获得期望的输出,所以这是我的两个表:
交易表
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
预先感谢
答案 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行。为每个用户创建另一行。这可以成倍增长。因此,请仔细地线程。 :)