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

杰森·霍洛德诺夫(Jason Kholodnov)

我正在优化我编写的一个小型应用程序,以减少每个请求的数据库调用次数,并且不知道如何构造我的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个呼叫(很幸运,我的用户表现在很短),但是扩展性很差。(每个数据库调用需要.050s)

一位朋友提出了以下建议:

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

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

这是使用Join的好例子吗?(我是sql noob)。

谢谢!

丹尼尔·罗斯曼

这与Python或联接无关。

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章