Voici un nouveau challenge sql que j’ai cross posté aussi sur Beyond Relational avec Jacob Sebastian. Je travaille maintenant avec lui à la rédaction de nouveaux challenges sql. Un nouveau blog dédié ainsi qu’un forum ont été ouverts spécialement pour l’occasion.
Il s’agit ici d’étudier comment transformer des données séparées par des virgules en données tabulaires, mais le tout en ligne, en une seule requête.
Le contexte
Vous devez faire un rapport sur des recherches par mots clés sur un blog.
Le moteur de blog enregistre l’ensemble des mots clés d’un post dans un champ ‘tags’:
exemple de données du blog:
id name tags
----------- -------------------- --------------------
1 post 1 sql,profiler,table
2 post 2 sql,performance
3 post 3 profilter
4 post 4 view,table
Chaque fois que quelqu’un fait une recherche par mots clés, une table de cache de ces ensembles de mots clés est stockée en base pour fournir ultérieurement des données à la fonctionnalité d’auto-suggestion du champ de recherche.
exemple de donnée de cette table:
id data
----------- --------------------------------
1 sql,performance
2 profiler
3 table,performance,view
Le challenge
Vous devez trouver pour chaque recherche effectuée dans la table d’historique tous les posts correspondants en indiquant le nombre de mots clés correspondants. Un post correspondant à la recherche doit contenir au moins un mot clé associé figurant dans la liste des mots clés de la recherche.
Par rapport aux exemples de données précédents voici la table résultante que vous devez trouver:
ID data name tags RELEVANCE
-- ----------------------- -------- -------------------- -----------
1 sql,performance post 2 sql,performance 2
1 sql,performance post 1 sql,profiler,table 1
2 profiler post 1 sql,profiler,table 1
3 table,performance,view post 4 view,table 2
3 table,performance,view post 1 sql,profiler,table 1
3 table,performance,view post 2 sql,performance 1
-
- Conditions:
- Vous devez écrire une seule requête pour aboutir au résultat souhaité.
- Merci d’utiliser le code d’exemple ci-dessous pour votre requête et de tester qu’elle fonctionne correctement avec celui-ci
- envoyez vos solutions par mail sur challenge at rui point fr
- Pour éviter les erreurs envoyez vos solutions dans un fichier .sql attaché à votre mail avec les données fournies et votre solution.
- Vous avez jusqu’au 1er mai 2009 pour envoyer vos réponses
- vous pouvez poser vos questions dans les commentaires (vos réponses par mail uniquement)
Merci et bon challenge!
Sample Data:
DECLARE @filter TABLE (id INT IDENTITY, data nvarchar(32))
insert into @filter (data) values ('sql,performance')insert into @filter (data) values ('profiler')insert into @filter (data) values ('table,performance,view')
DECLARE @blog TABLE (id INT IDENTITY, name nvarchar(20), tags nvarchar(20))
insert into @blog (name,tags) values ('post 1','sql,profiler,table')insert into @blog (name,tags) values ('post 2','sql,performance')insert into @blog (name,tags) values ('post 3','profilter')insert into @blog (name,tags) values ('post 4','view,table')
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :