我正在优化我编写的一个小应用程序,以减少每个请求的数据库调用次数,并且不知道如何构造我的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个电话(幸好我的用户表现在很低),但它的扩展性非常差。 (每次db调用需要.050s)
一位朋友提出了类似的建议:
"SELECT avg(stat1),avg(stat2),avg(stat3) from ___ where name in " userNames
但这只返回一行,我需要len(userNames)行数。
这是一个使用Join的好例子吗? (我是一个sql noob)。
谢谢!
答案 0 :(得分:3)
这不是关于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