2016-04-03 4 views
0

Ich versuche, die Ergebnisse eines grundlegenden in Python erstellten arithmetischen Tests anzuzeigen, der Test wird dreimal wiederholt und sammelt drei Punkte, das funktioniert gut, aber wenn ich versuche, diese durch die höchste Punktzahl der drei in absteigender Reihenfolge anzuzeigen, wird mir eine Fehlermeldung angezeigt. was wie folgt ist.Wie ermitteln ich den höchsten Wert von drei Spalten aus der gleichen Zeile, 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 

Wenn es jedoch von einer der Spalten organisiert wird, z. nur 1 Punkte, es funktioniert gut. Der Code, den ich nicht herausfinden kann, wie zu beheben ist, ist unten.

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) 

Jede Hilfe mit diesem wäre sehr dankbar, ich versuche auch, den Durchschnitt zu bestimmen.

Antwort

1

Zunächst wird die Syntax der ORDER BY seine falsch sollte, sein

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

Sitz in der Antwort von Max of multiple columns, wenn Sie durch die hohe Punktzahl der Spalten bestellen müssen, können Sie sie

berechnen müssen
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

Entschuldigung, aber könnten Sie anzeigen, dass das Programm implementiert, Probleme mit der Implementierung. –

+0

Ok, Sie müssen nur die Abfrage in die 'cursor.execute ('' 'SELECT ...' '')' und wird funktionieren – Patricio

0

Die SQL-Klausel ORDER BY benötigt keine Klammern, wenn ihre Argumente deklariert werden. Mit anderen Worten, ORDER BY (...) zu tun ist tatsächlich eine ungültige Syntax.

mehrere Spalten deklarieren gegen bestellen, nur die Klammern weglassen:

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

This example die Grundlagen abdecken sollte. Beachten Sie, dass für jede Spalte möglicherweise ein eigenes Schlüsselwort für den Abstieg/Aufstieg erforderlich ist.

+0

Ich kann nicht in der Lage sein, dies in das Programm zu integrieren. –

+0

Ersetzen Sie einfach die 'cursor.execute()', die Sie bereits jetzt haben. Wenn das nicht funktioniert, könnten Sie genauer angeben, was der Fehler ist? –