Mysql 为每个用户选择一个值,即使没有sql
我有一个银行交易表,我正在尝试创建一个视图,该视图根据卡类型保存每个注册用户的余额。因此,即使用户从未进行过交易,我希望它显示为Mysql 为每个用户选择一个值,即使没有sql,mysql,sql,Mysql,Sql,我有一个银行交易表,我正在尝试创建一个视图,该视图根据卡类型保存每个注册用户的余额。因此,即使用户从未进行过交易,我希望它显示为 --------------------- | user_id | balance | --------------------- | 1 | 0.0 | --------------------- 但当我在没有事务的情况下执行查询时: SELECT u.id AS user_id, SUM(amount) AS balance FROM `tr
---------------------
| user_id | balance |
---------------------
| 1 | 0.0 |
---------------------
但当我在没有事务的情况下执行查询时:
SELECT u.id AS user_id, SUM(amount) AS balance FROM `transactions` t
INNER JOIN users u
ON t.from_id = u.id
WHERE card_type = 'debit'
它返回:
---------------------
| user_id | balance |
---------------------
| null | null |
---------------------
因此,如果可能的话,如何在表中没有事务的情况下检索第一个结果?您正在寻找外部联接和分组依据: 注: 您需要所有用户,因此它是左侧联接中的第一个表。 每个用户只需要一行,所以需要按u.id分组。 您正在对第二个表进行筛选,因此该筛选器位于on子句中。
您正在通过以下方式查找外部联接和组: 注: 您需要所有用户,因此它是左侧联接中的第一个表。 每个用户只需要一行,所以需要按u.id分组。 您正在对第二个表进行筛选,因此该筛选器位于on子句中。
是的,这会起作用,但它会使余额为空,如果没有,我可以设置一个默认值吗,比如0?我添加了COALESCE以便:选择u.id作为用户id,COALESCESUMt.amount,0作为用户的余额u LEFT在t上加入交易t。FROM_id=u.id和t.card_type='debit'按u.id分组;是的,这会起作用,但它会使余额为空,如果没有,我可以设置一个默认值吗,比如0?我添加了COALESCE以便:选择u.id作为用户id,COALESCESUMt.amount,0作为用户的余额u LEFT在t上加入交易t。FROM_id=u.id和t.card_type='debit'按u.id分组;
SELECT u.id AS user_id, COALESCE(SUM(t.amount), 0) AS balance
FROM users u LEFT JOIN
transactions t
ON t.from_id = u.id AND
t.card_type = 'debit'
GROUP BY u.id;