SQLite: pb SELECT sur un sous intervalle de lignes WHERE condition [Résolu]

Signaler
Messages postés
30
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
19 décembre 2020
-
Messages postés
30
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
19 décembre 2020
-
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

Messages postés
31042
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 janvier 2021
3 182
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


Messages postés
30
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
19 décembre 2020

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
Messages postés
31042
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 janvier 2021
3 182 >
Messages postés
30
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
19 décembre 2020

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
Messages postés
30
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
19 décembre 2020

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 !