python - 将多个相同的 SQLite 查询合并为一个

标签 python sqlite

我正在优化我编写的一个小应用程序,以减少每个请求的数据库调用次数,但不知道如何构建我的 SQL 查询。

我有这样的数据

name   stat1   stat2   stat3
john    1       2       22
john    2       4       -2
richard 3       4       0
john    0       3       1
jacob   12      9       -20

我目前的声明大致如下:

userNames = execute("SELECT DISTINCT name FROM ___")
for user in userNames:
    var userdata = "SELECT avg(stat1), avg(stat2), avg(stat3) FROM ___ WHERE name == '"+str(user)

现在这显然不好。它进行了 20 次调用(幸好我的用户表现在很低),但它的扩展性非常差。 (每个数据库调用需要 0.050 秒)

一位 friend 提出了如下建议:

"SELECT avg(stat1),avg(stat2),avg(stat3) from ___ where name in " userNames

但这只返回一行,我需要 len(userNames) # 行。

这是使用 Join 的好案例吗? (我是一个sql菜鸟)。

谢谢!

最佳答案

这与 Python 或联接无关。

这里你需要的是聚合。您想要计算每个不同名称的平均值,您可以通过 GROUP BY 在 SQL 中执行此操作。所以:

SELECT name, avg(stat1), avg(stat2), avg(stat3) FROM ____ GROUP BY name;

输出(在sqlite中):

jacob|12.0|9.0|-20.0
john|1.0|3.0|7.0
richard|3.0|4.0|0.0

关于python - 将多个相同的 SQLite 查询合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797434/

相关文章:

python - 使用 scipy.signal.welch 找不到合适的能量

python - 如何在Python中将NetCDF文件中的数据信息(YYYYMMDD)拆分为YYYY MM DD?

android - 没有这样的列错误-sqlite

sqlite - F# 查询表达式 - 在 SqlProvider 和 SQLite 中使用字符串比较的限制

android - SQLite 中的日期时间排序

python - 使用 python win32com Outlook 清楚地记录阅读电子邮件功能

python - pyautogui 鼠标单击在某些程序中不起作用

python - 如何使用 Python 修改 XLSX 列格式

java - 在我的主要 Activity 中将 sqlite 数据库中的值显示到 ListView 。安卓

c++ - 如何检查行是否在 SQLite 中被插入或替换?