スナップ:スコアランキングを実現するためにSQLクエリーを書きます.2つのスコアが同じ場合、2つのスコアの順位が同じで、'Rank from scores order by score desc'エラーを報告します.

6510 ワード

今日pythonでデータベースに接続して力の問題をする時このような間違いを発見しました
Traceback (most recent call last):
  File "D:/PYTHON/test/  /  .py", line 864, in <module>
    cursor.execute(sql)
  File "D:\pythonData\lib\site-packages\MySQLdb\cursors.py", line 209, in execute
    res = self._query(query)
  File "D:\pythonData\lib\site-packages\MySQLdb\cursors.py", line 315, in _query
    db.query(q)
  File "D:\pythonData\lib\site-packages\MySQLdb\connections.py", line 231, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Rank from scores s order by score desc' at line 1")

私のコードはこうです.
import MySQLdb
conn=MySQLdb.Connect(host='localhost',user='root',password='123456',db='delete')
cursor=conn.cursor()
sql='select score,(select count(distinct score) from scores where score>=s.score) as Rank from scores s order by score desc;'
# sql='select count(distinct score) as Rank from scores where score'
cursor.execute(sql)
res=cursor.fetchall()
print(res)
cursor.close()
conn.close()

通常の考え方では、「Rank from scores s order by score desc」という言葉が問題になっていますが、私が「,(select count(distinct score)from scores where score>=s.score)as Rank」という言葉を削除すると、プログラムが正常に動作します.私が単独でこの言葉を単独で出して運転しているときも間違っていて、何が原因なのか分かりません.その後、ネットで探しても答えが見つからず、試した気持ちで「as Rank」を削除し、プログラムは正常に動作した.
((4.0, 1), (4.0, 1), (3.85, 2), (3.65, 3), (3.65, 3), (3.5, 4))

Process finished with exit code 0

その後、Navicatでもsql文を試してみましたが、エラーも報告されますが、名前を付けないと正常に動作します
したがって、pycharmなどのコンパイラが名前を付けて表示できない理由であるはずです.