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

如何在Python+MySQL中统计指定10个用户未来月份的存款总额?

解决方案

先修正你原SQL的语法问题

你第二步的查询语句里写了两个WHERE,这会导致语法错误,应该用AND连接所有条件,示例:

select sum(RealCash) 
from bank 
where Status=1 and TransactionType=4 and date between 'June' and 'July'

方法一:用SQL子查询直接关联(推荐,效率更高)

不需要在Python中存储用户ID变量,直接通过子查询一步完成统计,同时满足“未来月份”的条件(假设未来月份是指July之后的时间,可根据实际日期格式调整):

SELECT SUM(RealCash)
FROM bank
WHERE Status = 1 
  AND TransactionType = 4 
  AND date > 'July' -- 替换为实际的未来月份起始日期,比如'2024-08-01'
  AND UserId IN (
      SELECT UserId 
      FROM Users 
      WHERE Depositor BETWEEN 'June' AND 'July'
  )

注意:如果Depositor和date是日期类型字段,不要用'June'这种字符串,应该用标准日期格式(比如'2024-06-01'和'2024-07-31'),避免字符串比较的逻辑错误。

方法二:通过Python传入用户ID列表(参数化查询,避免SQL注入)

如果你已经把第一步的用户ID存入了result变量(比如一个Python列表),可以用参数化查询的方式将ID列表传入SQL,确保安全性:

import pymysql

# 数据库连接配置(根据你的实际情况修改)
db_config = {
    'host': 'localhost',
    'user': 'your_username',
    'password': 'your_password',
    'database': 'your_db_name'
}

# 第一步得到的用户ID列表
result = [1, 2, 3, ..., 10]  # 替换为实际的ID集合

# 建立连接并执行查询
with pymysql.connect(**db_config) as conn:
    with conn.cursor() as cursor:
        # 构造IN语句的占位符,数量和ID列表长度一致
        placeholders = ', '.join(['%s'] * len(result))
        sql = f"""
        SELECT SUM(RealCash)
        FROM bank
        WHERE Status = 1 
          AND TransactionType = 4 
          AND date > 'July' -- 替换为实际的未来月份起始日期
          AND UserId IN ({placeholders})
        """
        # 执行查询,传入ID列表作为参数
        cursor.execute(sql, result)
        total_amount = cursor.fetchone()[0]
        print(f"指定用户未来月份存款总额: {total_amount}")

关键点:必须用参数化查询,不要直接将ID拼接进SQL字符串,否则会存在SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:12:26