• 1. 【力扣】银行账户概要 II


    表: Users

    +--------------+---------+
    | Column Name  | Type    |
    +--------------+---------+
    | account      | int     |
    | name         | varchar |
    +--------------+---------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    account 是该表的主键.
    表中的每一行包含银行里中每一个用户的账号.

    表: Transactions

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | trans_id      | int     |
    | account       | int     |
    | amount        | int     |
    | transacted_on | date    |
    +---------------+---------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    trans_id 是该表主键.
    该表的每一行包含了所有账户的交易改变情况.
    如果用户收到了钱, 那么金额是正的; 如果用户转了钱, 那么金额是负的.
    所有账户的起始余额为 0.

    写一个 SQL, 报告余额高于 10000 的所有用户的名字和余额. 账户的余额等于包含该账户的所有交易的总和.

    返回结果表单没有顺序要求.

    查询结果格式如下例所示.

    Users table:
    +------------+--------------+
    | account    | name         |
    +------------+--------------+
    | 900001     | Alice        |
    | 900002     | Bob          |
    | 900003     | Charlie      |
    +------------+--------------+
    
    Transactions table:
    +------------+------------+------------+---------------+
    | trans_id   | account    | amount     | transacted_on |
    +------------+------------+------------+---------------+
    | 1          | 900001     | 7000       |  2020-08-01   |
    | 2          | 900001     | 7000       |  2020-09-01   |
    | 3          | 900001     | -3000      |  2020-09-02   |
    | 4          | 900002     | 1000       |  2020-09-12   |
    | 5          | 900003     | 6000       |  2020-08-07   |
    | 6          | 900003     | 6000       |  2020-09-07   |
    | 7          | 900003     | -4000      |  2020-09-11   |
    +------------+------------+------------+---------------+
    
    Result table:
    +------------+------------+
    | name       | balance    |
    +------------+------------+
    | Alice      | 11000      |
    +------------+------------+
    Alice 的余额为(7000 + 7000 - 3000) = 11000.
    Bob 的余额为1000.
    Charlie 的余额为(6000 + 6000 - 4000) = 8000.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/bank-account-summary-ii

    • 解题思路

    使用到两个表的级联查询,①先查询得到相关的字段名,②使用inner join进行两个表的级联操作,③多个相同的account只返回一个,所以使用 group by进行分组操作;④使用having关键字来进行多表间的条件关系运算。

    select name,sum(t1.amount) as balance from Transactions as t1
     inner join Users as u1 on t1.account = u1.account
     group by u1.account 
     having sum(t1.amount) >10000;
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    [python]基于yolov10+gradio目标检测演示系统设计
    二 需求工程和设计模式
    会展购票系统有哪些特点?如何选择好的会展购票系统开发公司
    嵌入式系统设计与应用---嵌入式系统概述(学习笔记)
    c语言编程题经典100例——(41~45例)
    C++ Reference: Standard C++ Library reference: C Library: cstdio: fgetpos
    Leetcode刷题详解——将x减到0的最小操作数
    闭包和装饰器
    骨传导耳机用久了伤耳朵吗?骨传导耳机有什么优势
    MyBatisPlus(十八)字段类型处理器:对象存为JSON字符串
  • 原文地址:https://blog.csdn.net/weixin_44081096/article/details/126278229