一个取数案例记录
要从数据库中查一下当前未通过的考生,并且是在有效期内的,有效期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条评论!