一个取数案例记录

要从数据库中查一下当前未通过的考生,并且是在有效期内的,有效期2级是两年,34级是一年,从当前时间推算,数据库为sqlite,以下是不同方式来进行实现:

1.Excel文档

直接新建工作表简单的用函数进行统计即可,公式=COUNTIF(前批未通过!J:J,A2),下拉填充,ok

2.SQL语句

打开Navicat,新建查询,先做个统计记录

SELECT
  p_batch AS 考试批次,
  p_level AS 等级,
  COUNT(*) AS 总人数
FROM stu_list
WHERE p_status = 0
AND (
    (p_level = 2 AND p_date > '2024-06-01')
    OR
    (p_level IN (3, 4) AND p_date > '2025-06-01')
)
GROUP BY p_batch, p_level
ORDER BY p_batch, p_level;

确认数据无误了之后,进行查询,稍微修改即可,ok

SELECT
*
FROM stu_list
WHERE p_status = 0
AND (
    (p_level = 2 AND p_date > '2024-06-01')
    OR
    (p_level IN (3, 4) AND p_date > '2025-06-01')
)
ORDER BY p_batch, p_level;

3.用Python来进行数据清洗

数据经过SQL语句验证无误之后,即可用Python来进行获取数据了,用脚本的思路来获取数据,逻辑上更为简单,接近自然语言了,简单代码如下:

import pandas as pd
import sqlite3

db_path = r"D:\phpstudy_pro\WWW\ggyys\asset\ggyys.db"
conn = sqlite3.connect(db_path)  # 创建数据库连接
df = pd.read_sql(f'SELECT * FROM stu_list WHERE p_status=0', conn)

# 条件1:等级=2 且 日期>2024-06-01
cond1 = (df["p_level"] == 2) & (df["p_date"] > "2024-06-01")

# 条件2:等级=3/4 且 日期>2025-06-01
cond2 = (df["p_level"].isin([3, 4])) & (df["p_date"] > "2025-06-01")

# 合并满足条件的数据
df_final = df[cond1 | cond2].copy()

result = df_final.groupby(["p_batch", "p_level"], as_index=False).agg(
    总人数=("p_level", "count")  # COUNT(*)
).rename(
    columns={"p_batch": "考试批次", "p_level": "等级"}  # AS 重命名
).sort_values(by=["考试批次", "等级"])  # ORDER BY

# 输出结果
print(result)

代码 2026-05-08 14:59:19 通过 网页 浏览(109)

共有0条评论!

发表评论