返回介绍

solution / 1500-1599 / 1555.Bank Account Summary / README

发布于 2024-06-17 01:03:18 字数 3597 浏览 0 评论 0 收藏 0

1555. 银行账户概要

English Version

题目描述

用户表: Users

+--------------+---------+
| Column Name  | Type  |
+--------------+---------+
| user_id    | int   |
| user_name  | varchar |
| credit     | int   |
+--------------+---------+
user_id 是这个表的主键(具有唯一值的列)。
表中的每一列包含每一个用户当前的额度信息。

 

交易表:Transactions

+---------------+---------+
| Column Name   | Type  |
+---------------+---------+
| trans_id    | int   |
| paid_by     | int   |
| paid_to     | int   |
| amount    | int   |
| transacted_on | date  |
+---------------+---------+
trans_id 是这个表的主键(具有唯一值的列)。
表中的每一列包含银行的交易信息。
ID 为 paid_by 的用户给 ID 为 paid_to 的用户转账。

 

力扣银行 (LCB) 帮助程序员们完成虚拟支付。我们的银行在表 _Transaction_ 中记录每条交易信息,我们要查询每个用户的当前余额,并检查他们是否已透支(当前额度小于 0)。

编写解决方案报告:

  • user_id 用户 ID
  • user_name 用户名
  • credit 完成交易后的余额
  • credit_limit_breached 检查是否透支 ("Yes" 或 "No")

任意顺序返回结果表。

结果格式见如下所示。

 

示例 1:

输入:
Users 表:
+------------+--------------+-------------+
| user_id  | user_name  | credit    |
+------------+--------------+-------------+
| 1      | Moustafa   | 100     |
| 2      | Jonathan   | 200     |
| 3      | Winston    | 10000     |
| 4      | Luis     | 800     | 
+------------+--------------+-------------+

Transactions 表:
+------------+------------+------------+----------+---------------+
| trans_id   | paid_by  | paid_to  | amount   | transacted_on |
+------------+------------+------------+----------+---------------+
| 1      | 1      | 3      | 400    | 2020-08-01  |
| 2      | 3      | 2      | 500    | 2020-08-02  |
| 3      | 2      | 1      | 200    | 2020-08-03  |
+------------+------------+------------+----------+---------------+

输出:
+------------+------------+------------+-----------------------+
| user_id    | user_name  | credit   | credit_limit_breached |
+------------+------------+------------+-----------------------+
| 1      | Moustafa   | -100     | Yes           | 
| 2      | Jonathan   | 500    | No          |
| 3      | Winston  | 9900     | No          |
| 4      | Luis     | 800    | No          |
+------------+------------+------------+-----------------------+
Moustafa 在 "2020-08-01" 支付了 $400 并在 "2020-08-03" 收到了 $200 ,当前额度 (100 -400 +200) = -$100
Jonathan 在 "2020-08-02" 收到了 $500 并在 "2020-08-08" 支付了 $200 ,当前额度 (200 +500 -200) = $500
Winston 在 "2020-08-01" 收到了 $400 并在 "2020-08-03" 支付了 $500 ,当前额度 (10000 +400 -500) = $9900
Luis 未收到任何转账信息,额度 = $800

解法

方法一

# Write your MySQL query statement below
SELECT
  t.user_id,
  user_name,
  SUM(t.credit) AS credit,
  IF(SUM(t.credit) < 0, 'Yes', 'No') AS credit_limit_breached
FROM
  (
    SELECT paid_by AS user_id, -amount AS credit FROM Transactions
    UNION ALL
    SELECT paid_to AS user_id, amount AS credit FROM Transactions
    UNION ALL
    SELECT user_id, credit FROM Users
  ) AS t
  JOIN Users AS u ON t.user_id = u.user_id
GROUP BY t.user_id;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文