You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

银行账户每笔交易后余额计算及多日购买用户数统计的SQL实现问询

两个SQL需求的解决方案

我来帮你搞定这两个SQL查询问题,直接上可运行的代码和对应的解释:

问题1:计算每个账户每笔交易后的剩余余额

需求说明

给定Bank_Transaction表,需要计算每个账户每完成一笔交易后的实时剩余余额,余额是该账户所有历史交易(包括当前这笔)的累计金额。

SQL查询语句

SELECT 
    account_number,
    transaction_date,
    transaction_amount,
    SUM(transaction_amount) OVER (
        PARTITION BY account_number 
        ORDER BY transaction_date
    ) AS remaining_balance
FROM Bank_Transaction
ORDER BY account_number, transaction_date;

代码解释

  • PARTITION BY account_number:将数据按账户分组,确保我们只在同一个账户内计算累计余额,不会和其他账户的交易混淆。
  • ORDER BY transaction_date:保证交易按发生时间顺序累加,毕竟余额必须按照交易的先后顺序计算才准确。
  • SUM(transaction_amount) OVER (...):窗口函数会对每个账户内的交易按时间顺序做累计求和,每一行的结果就是该笔交易完成后的账户余额。

问题2:统计存在多日购买行为的用户数量

需求说明

给定Transaction表,需要统计至少在2个不同日期有过购买行为的用户数量(同一用户单日购买多款产品只算1天)。

SQL查询语句

SELECT COUNT(User_id) AS multi_day_users
FROM (
    SELECT User_id, COUNT(DISTINCT transaction_date) AS purchase_days
    FROM Transaction
    GROUP BY User_id
) AS user_purchase_summary
WHERE purchase_days >= 2;

代码解释

  1. 内层子查询:
    • 按User_id分组,用COUNT(DISTINCT transaction_date)统计每个用户的唯一购买天数(自动排除了同一用户单日多次购买的重复统计)。
  2. 外层查询:
    • 筛选出购买天数≥2的用户,然后用COUNT(User_id)统计这些用户的总数,就是我们要的结果。

如果你想用CTE(公共表表达式)让代码更易读,也可以写成这样:

WITH user_purchase_dates AS (
    SELECT DISTINCT User_id, transaction_date
    FROM Transaction
)
SELECT COUNT(DISTINCT User_id) AS multi_day_users
FROM user_purchase_dates
GROUP BY User_id
HAVING COUNT(transaction_date) >= 2;

内容的提问来源于stack exchange,提问作者P Niharika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:22:26