2016-04-03 30 views
0

我想显示在Python创建了一个基本的算术测试的结果,测试重复三次,并收集三个分数,此作品好,但是当我尝试以降序显示这三个分数中的最高分数时,我显示了一条错误消息。如下所示。如何确定从同一行,Python的三列的最高值,SQLite3的

Traceback (most recent call last): 
    File "F:\Adair,Rowan CA2\Task 3\Code\DisplayTablesScore.py", line 4, in <module> 
    cursor.execute("SELECT * FROM class1 ORDER BY (score1,score2,score3) DESC") 
sqlite3.OperationalError: near ",": syntax error 

然而,当它由一个列组织时,例如,只有1分,它工作正常。 我无法弄清楚如何解决的代码如下。

import sqlite3 
connection = sqlite3.connect("class1.db") 
cursor = connection.cursor() 
cursor.execute("SELECT * FROM class1 ORDER BY (score1,score2,score3) DESC") 
print("Class 1:") 
result = cursor.fetchall() 
for r in result: 
    print(r) 

任何与此有关的帮助都会受到赞赏,我也试图确定平均值。

回答

1

一阶的语法由它错了,应该是

SELECT * FROM class1 ORDER BY score1 DESC, score2 DESC, score3 DESC; 

立足的Max of multiple columns的反应,如果需要由高分列的命令,你需要计算他们

SELECT score1, score2, score3, 
    CASE 
    WHEN score1 >= score2 AND score1 >= score3 THEN score1 
    WHEN score2 >= score1 AND score2 >= score3 THEN score2 
    WHEN score3 >= score1 AND score3 >= score2 THEN score3 
    ELSE score1 
END AS high_score FROM class1 ORDER BY high_score DESC; 
+0

道歉,但你可以显示在程序中执行,执行有问题。 –

+0

好吧,你只需要把查询的'cursor.execute(“”“SELECT ...‘’”)',将工作 – Patricio

0

宣布它的参数时,SQL子句ORDER BY不带括号。换句话说,做ORDER BY (...)确实是无效的语法。

声明多重列订购反对,只是省略括号:

cursor.execute("SELECT * FROM class1 ORDER BY score1 DESC, score2 DESC ,score3 DESC") 

This example应涵盖的基本知识。请注意,每列可能需要其自己的下降/提升关键字。

+0

我似乎无法能够impliment到程序这一点。 –

+0

只需要替换现在已有的'cursor.execute()'。如果这不起作用,你能更具体地说明错误是什么吗? –