我在sqlite数据库中有一个表,当通过我的终端在sqlite3中运行时以及在python脚本中调用时,我会收到两个输出。 python脚本中的输出是奇数,它不是一个实际的数据点。
表格如下:
SELECT manager_name, points_for, wins, year FROM standings;
manager_name points_for wins year
Eddy 1513.82 8 2014
Drew 1351.8 10 2014
Sammy 1497.72 10 2014
Mike2 1474.22 10 2014
Sam 1360.94 7 2014
Rick 1379.1 7 2014
Jeff 1381.1 6 2014
Josh 1411.16 5 2014
Bay 1237.2 5 2014
Mike 1187.68 6 2014
G 1208.66 5 2014
Brett 1245.78 5 2014
Luke 1395.76 4 2014
A Roberman 1331.1 3 2014
当我在sqlite3中运行以下查询时,我收到了正确的响应(大多数以积分作为决胜局获胜)
SELECT max(wins), points_for, manager_name, year FROM (SELECT manager_name, wins, points_for FROM standings ORDER BY wins DESC, points_for DESC);
OUTPUT:
manager_name points_for max(wins) year
SamK 1497.72 10 2014
但是当我通过python脚本运行查询时,我得到了一个非常奇怪的结果。
df = pd.read_sql(" SELECT max(wins), points_for, manager_name, year FROM (SELECT manager_name, wins, points_for, year FROM standings ORDER BY wins DESC, points_for DESC)", conn)
print df
max(wins) points_for manager_name year
0 10 1497.72 Al R 2014
请记住,我在这个数据库中运行了许多类似的python脚本,并且从来没有得到像这样没有意义的输出。
使用pysqlite进行编辑具有相同的结果
c.execute('SELECT max(wins), points_for, manager_name, year FROM (SELECT manager_name, wins, points_for, year FROM standings ORDER BY wins DESC, points_for DESC)')
r = c.fetchone()
print r
(10, 1497.72, u'Al R', 2014)
答案 0 :(得分:1)
两个输出都是正确的。
max(wins)
输出子查询中找到的最大wins
值
points_for
,manager_name
和year
从某个随机行输出值。
(子查询中的ORDER BY无效;如果需要,max()
会自行排序。)
要从与max()
匹配的行之一获取行值,必须使用SQLite 3.7.11或更高版本(这是SQLite扩展,而不是标准SQL的一部分)。
要根据ORDER BY实际获取第一行,您必须使用LIMIT clause:
SELECT wins, points_for, manager_name, year
FROM standings
ORDER BY wins DESC, points_for DESC
LIMIT 1;