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

Résolu/Fermé
JamieMacUloth Messages postés 47 Date d'inscription jeudi 16 février 2017 Statut Membre Dernière intervention 6 juin 2022 - 18 déc. 2020 à 10:21
JamieMacUloth Messages postés 47 Date d'inscription jeudi 16 février 2017 Statut Membre Dernière intervention 6 juin 2022 - 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 36602 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 décembre 2022 4 419
18 déc. 2020 à 11:35
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 47 Date d'inscription jeudi 16 février 2017 Statut Membre Dernière intervention 6 juin 2022
Modifié le 18 déc. 2020 à 17:05
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 36602 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 décembre 2022 4 419 > JamieMacUloth Messages postés 47 Date d'inscription jeudi 16 février 2017 Statut Membre Dernière intervention 6 juin 2022
18 déc. 2020 à 17:33
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 47 Date d'inscription jeudi 16 février 2017 Statut Membre Dernière intervention 6 juin 2022
19 déc. 2020 à 12:33
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