1
votes

La fonction de classement est-elle prise en charge dans python sqlite3

Je me demande si la bibliothèque python sqlite3 prend en charge la fonction RANK ().

Lorsque j'exécute une requête via le navigateur Sqlite en ligne cela fonctionne bien, mais via python cela échoue.

File "xyz.py", line 509, in createData
    conn.execute('SELECT RANK() OVER ( ORDER BY dateAndTime)  FROM xyz;')
sqlite3.OperationalError: near "(": syntax error

Merci d'avance!


4 commentaires

avez-vous essayé de supprimer le ";" à la fin de l'instruction de requête? Je pense qu'il ne devrait pas y avoir de problème avec rank () via python. jetez un œil ici sebastianraschka.com/Articles/… car cela pourrait aider


Sqlite a des fonctions de fenêtre dans 3.25, vous devez donc l'utiliser ou une version plus récente.


Oui, ma bibliothèque est la version 3.22. Merci pour votre aide @Shawn


github.com/coleifer/pysqlite3


3 Réponses :


0
votes

Je ne sais pas si la version de SQLite que votre script Python utilise prend en charge RANK () . En supposant que ce n'est pas le cas, voici une requête que vous pouvez utiliser comme solution de contournement:

SELECT
    (SELECT COUNT(*) + 1 FROM yourTable t2
     WHERE t2.id < t1.id) rnk
FROM yourTable t1
ORDER BY
    dateAndTime;

Nous pouvons utiliser une sous-requête corrélée pour gérer la logique de classement. Notez que pour DENSE_RANK , la solution de contournement n'est peut-être pas si simple.

Voici une démo montrant que ma logique et RANK se comportent de la même manière.

Démo


2 commentaires

Comment cela aide-t-il si la lib ne prend pas en charge le rang?


@ user2532072 Désolé, j'ai collé la mauvaise requête dans la réponse. Vérifiez la réponse ou la démo mise à jour.



0
votes

Une autre alternative consiste à utiliser row_number () à la place:

ORDER BY DESC # or ASC 

combiné avec croissant (ASC) ou décroissant (DESC) pour obtenir un classement trié

row_number()  


1 commentaires

Je suis d'accord que cela fonctionnerait pour mon exemple de test, mais mon cas réel doit être classé



0
votes

Shawn a fait remarquer que ma bibliothèque était trop ancienne. Br

Sqlite a des fonctions de fenêtre dans la version 3.25, vous devez donc l'utiliser ou une version plus récente.


0 commentaires