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

Python中使用sqlite3如何按两列同值分组计算指定列平均值

Python sqlite3 实现方法

核心思路

你需要先把分散在id1、id2两列的食材ID统一拆成单列,再按ID分组计算平均值即可,用SQL的UNION ALL就能快速完成列转行的操作。

完整代码示例

import sqlite3

# 1. 连接数据库(这里示例用内存数据库,你可以替换为自己的db文件路径)
conn = sqlite3.connect(':memory:')
cur = conn.cursor()

# --------------- 以下是初始化测试数据的代码,你如果已有表可以跳过 ---------------
# 创建测试表
cur.execute('''
CREATE TABLE food_pair (
    id1 INTEGER,
    id2 INTEGER,
    cnt INTEGER,
    avg_score INTEGER
)
''')
# 插入你给的样本数据
test_data = [
    (2,3,3,10),
    (3,4,3,11),
    (2,5,3,12),
    (4,5,3,13)
]
cur.executemany('INSERT INTO food_pair VALUES (?,?,?,?)', test_data)
conn.commit()
# ---------------------------------------------------------------------------

# 2. 执行查询SQL
query_sql = '''
SELECT id, AVG(avg_score) AS avg_avg_score
FROM (
    -- 把id1列的食材和对应得分查出来
    SELECT id1 AS id, avg_score FROM food_pair
    UNION ALL
    -- 把id2列的食材和对应得分查出来
    SELECT id2 AS id, avg_score FROM food_pair
) AS all_food_score
GROUP BY id
ORDER BY id
'''
cur.execute(query_sql)

# 3. 获取输出结果
result = cur.fetchall()
print("id | avg_avg_score")
print("-----------------")
for row in result:
    print(f"{row[0]:<2} | {row[1]:<13}")

# 关闭连接
conn.close()

输出验证

运行上述代码后输出结果和你预期完全一致:

id | avg_avg_score
-----------------
2  | 11.0         
3  | 10.5         
4  | 12.0         
5  | 12.5  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:27:00