如何确定同一行中三列的最高值,Python,SQLite3

时间:2016-04-03 17:48:19

标签: python sqlite average

我正在尝试显示在python中创建的基本算术测试的结果,测试重复三次并收集三个分数,这工作正常,但是当我尝试以降序中的三个最高分显示这些我显示错误信息。如下。

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)

对此的任何帮助都会受到极大的赞赏,我也在努力确定平均值。

2 个答案:

答案 0 :(得分:1)

首先ORDER BY的语法错误,应该是

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;

答案 1 :(得分:0)

SQL子句ORDER BY在声明其参数时不会使用括号。换句话说,执行ORDER BY (...)确实是无效的语法。

要声明要排序的多个列,只需省略括号:

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

This example应涵盖基础知识。请注意,每列可能需要自己的descension / ascension关键字。