Dans le cadre d'un projet pour apprendre SQL, j'ai téléchargé le dictionnaire en tant que .csv et configurer une table (1 colonne avec 307,104 mots intitulé "mots"). p>
Je suis coincé sur quelques requêtes, qui sont: p>
Je ne trouve pas le mot clé relatif à ce type de requête, toute aide serait appréciée. P>
3 Réponses :
Vous pouvez énumérer les mots avec Cela vous donne le mot qui suit immédiatement la "base de données". Vous pouvez modifier le dernier pour obtenir le mot suivant: p> le mot deux positions après: p> xxx pré> mot précédent: p> Le mot deux positions avant: p> row_number () code> dans une expression de table commune (si votre base de données prend en charge ces fonctionnalités), puis filtrez dans la requête extérieure:
+ 1 code> pour obtenir les autres résultats (par exemple, pour obtenir le mot de deux positions précédemment, vous utiliseriez
- 2 code>). P> Une autre option utilise une requête limitante de ligne. p>
select word
from mytable
where word < 'database'
order by word desc
limit 1, 1
Bonjour, merci pour cela, fonctionne parfaitement, non utilisé avec une expression de table commune avant
Vous pouvez utiliser des fonctions de fenêtre telles que Lag () code> (pour les mots avant "base de données") et
lead () code> (pour les mots après "base de données"):
select t.result
from (
select columnname, lag(columnname, 1) over (order by (select null)) result
from words
) t
where t.columnname = 'Database'
Si vous voulez le mot après la base de données: pour deux mots après: p> Les requêtes pour le "avant" sont Semblable mais le tri et la comparaison sont dans des directions opposées. p> Vous pouvez commencer à obtenir une fantaisie à l'aide de fonctions de fenêtre. Par exemple, si vous souhaitez tous les mots à partir de 2 avant 2 après, vous pouvez utiliser un nombre de fenêtres: p> Cependant, avec un index sur (mot) code>, la première approche va être plus rapide. P> p>
Tagez votre question avec la base de données que vous utilisez.