SQLite: pb SELECT sur un sous intervalle de lignes WHERE condition

Résolu
JamieMacUloth Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   -  
JamieMacUloth Messages postés 43 Date d'inscription   Statut Membre Dernière intervention   - 19 déc. 2020 à 12:33
Bonjour,

Voici mon problème. J'ai un table avec 2 champs et un exemple de valeurs dans cet ordre:
CHAMP_ID = {0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2}
CHAMP_WORD = {'hi','ho','hu','hu','ah','eh','ih','oh','eh','ah','ah','ih','eh','uh','ba','be','be','bi','bo'}
Je m'intéresse à une requête concernant le CHAMP_ID = 1 mettons, celui où les mots commencent par une voyelle. Je veux savoir le nombre de mots distincts sur les 9/10 ème de l'intervalle du champ_ID = 1. Dans l'exemple on a 10 valeurs donc je souhaite COUNT le nombre de DISTINCT WORD sur les 9 premières valeurs WHERE le CHAMP_ID = 1. Dans l'exemple on a donc 'ah', 'eh', 'ih', 'oh' soit 4 mots différents. J'exclus le 'uh' car il est en position 10 et je ne veux faire mon SELECT que sur les 9 premiers.
J'ai trituré ça dans tous les sens mais je n'y arrive pas

Au secours :)

Merci d'avance!

2 réponses

jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746
 
Bonjour,

Tu peux certainement utiliser un LIMIT 9
Un truc du genre
SELECT count(T.WORD)
FROM (
  SELECT * FROM tatable LIMIT 9
) T
WHERE le T.CHAMP_ID = 1. 
GROUP BY T.word


0
JamieMacUloth Messages postés 43 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Jordane45,

En effet ça semble être la bonne piste. Dans mon code, la limite est calculée dans une autre table temporaire:
TEMP_PARTIAL_WORD qui possède le champ TOTO et une valeur entière (2000). En adaptant ton conseil à mon code j'écris :

SELECT COUNT(DISTINCT c.WORD_ID) AS NB_DISTINCT_PARTIAL_WORD
FROM TEMP_PARTIAL_WORD d, (SELECT * FROM TEMP_BOOK_WORD_ID LIMIT d.TOTO) c

Cette requête ne fonctionne pas. Or si je remplace le d.TOTO par 2000, ça fonctionne. J'ai par ailleurs testé une condition bidon pour vérifier qu'il comprend bien le d.TOTO et ça marchait. Genre je disais AND d.TOTO = 0 et il me retournait 0 car d.TOTO vaut 2000 mais ne plantait pas. Du coup je sais pas pourquoi vu que le d.TOTO est reconnu par ailleurs, il n'arrive pas à le comprendre à côté du LIMIT
0
jordane45 Messages postés 38480 Date d'inscription   Statut Modérateur Dernière intervention   4 746 > JamieMacUloth Messages postés 43 Date d'inscription   Statut Membre Dernière intervention  
 
Peut-être un truc du genre
SELECT COUNT(DISTINCT c.WORD_ID) AS NB_DISTINCT_PARTIAL_WORD
FROM  (
    SELECT * 
    FROM  TEMP_BOOK_WORD_ID 
    LIMIT (SELECT TOTO FROM TEMP_PARTIAL_WORD ) 
  ) c

mais sans certitude.

NB : As tu remarqué que le code que je te poste est en "couleur" et indenté ?
Pour ça, il faut utiliser les BALISES DE CODE.
Explications à lire ( entièrement !! ) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Merci d'y penser dans tes prochains messages
0
JamieMacUloth Messages postés 43 Date d'inscription   Statut Membre Dernière intervention  
 
C'est génial ça a marché!!! Je ne sais pas comment te remercier! Je vais commencer par suivre ton conseil pour les balises pour la prochaine fois :))) Merci encore !
0