2016-04-03 7 views
0

pythonで作成した基本的な算術テストの結果を表示しようとしています。このテストは3回繰り返して3つのスコアを集めます。しかし、私は3つのうち最高のスコアで降順に表示しようとすると、エラーメッセージが表示されます。以下のとおりです。同じ行、Python、SQLite3から3つの列の最高値を調べる方法

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 

ただし、いずれかの列で整理されている場合など。それはうまく動作します。 修正方法を把握できないコードは次のとおりです。

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

まずその間違っBY ORDERの構文は、

Max of multiple columnsの応答に基づい
SELECT * FROM class1 ORDER BY score1 DESC, score2 DESC, score3 DESC; 

する必要があり、あなたは彼らに

を計算する必要があります
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基本をカバーする必要があります。各列に独自のdescension/ascensionキーワードが必要な場合があります。あなたは、列のハイスコアで注文する必要がある場合

+0

これをプログラムに含めることはできません。 –

+0

あなたが既に持っている 'cursor.execute()'を置き換えてください。それがうまくいかない場合は、エラーの内容を具体的に説明できますか? –

関連する問題