0
votes

SQL Trouver un résultat 1 champ sous la recherche

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").

Je suis coincé sur quelques requêtes, qui sont:

  • Quel mot vient après "base de données"
  • Quel mot vient 2 mots après "base de données"
  • Quel mot vient avant la "base de données"
  • Quel mot vient 2 mots avant la "base de données"

    Je ne trouve pas le mot clé relatif à ce type de requête, toute aide serait appréciée.


1 commentaires

Tagez votre question avec la base de données que vous utilisez.


3 Réponses :


0
votes

Vous pouvez énumérer les mots avec 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: xxx pré>

Cela vous donne le mot qui suit immédiatement la "base de données". Vous pouvez modifier le dernier + 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>

pour obtenir le mot suivant: p> xxx pré>

le mot deux positions après: p> xxx pré>

mot précédent: p> xxx pré>

Le mot deux positions avant: p>

select word
from mytable
where word < 'database'
order by word desc
limit 1, 1


1 commentaires

Bonjour, merci pour cela, fonctionne parfaitement, non utilisé avec une expression de table commune avant



0
votes

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'


0 commentaires

0
votes

Si vous voulez le mot après la base de données: xxx

pour deux mots après: xxx

Les requêtes pour le "avant" sont Semblable mais le tri et la comparaison sont dans des directions opposées.

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: xxx

Cependant, avec un index sur (mot) , la première approche va être plus rapide.


0 commentaires