【问题标题】:sqlite3.OperationalError: near "ORDER": syntax errorsqlite3.OperationalError:在“ORDER”附近:语法错误
【发布时间】:2023-03-30 17:09:01
【问题描述】:

我正在尝试让数据库根据他们拥有的用户数量来组织用户排名,他们拥有的点数越多,他们的排名就越高

cursor.execute("SELECT ID, Players, Points, FIND_IN_SET( Points, (SELECT GROUP_CONCAT( Points ORDER BY Points DESC ) FROM main)) AS Ranks FROM main")

这是一个很好的例子

id Players  score rank
1  Ida       100   2
2  Boo        58   5
3  Lala       88   4
4  Bash      102   1
5  Assem      99   3

【问题讨论】:

  • (1) 提供样本数据和期望的结果。 (2) 解释逻辑。
  • FIND_IN_SET() 是 SQLite 不支持的 MySql 函数。 GROUP_CONCAT() 也不支持 SQLite 中的 ORDER BY 子句。

标签: python sql sqlite


【解决方案1】:

如果你只是想要一个排名,使用DENSE_RANK()或类似的功能:

select m.*, dense_rank() over (order by points desc)
from main;

这使平局的排名相同,并且没有差距。例如,结果可能看起来像 1-1-2-2-2-3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2020-10-17
    • 2021-05-11
    相关资源
    最近更新 更多