OVH Cloud OVH Cloud

Méthode de dév

9 réponses
Avatar
ronando29
Question a la con : Admettons que vous deviez faire un tableau de stat
: ex sortir le nombre de clients par age : < 30 ans, 30 40ans, 40 50,
et > 50.
Vous faites 4 requetes ? ou 1 requete et tu traite les resultats de la
req avec une boucle ?

La j'ai un tableau de stats a faire, si je suis la premiere methode ca
me ferai 20 requetes... et avec la 2eme methode 5 requetes mais avec
une boucle pour chacune...

Quel est selon vs la meilleure methode ?

(je me pose de ces questions moi des fois ;) )

9 réponses

Avatar
Emmanuel Lecoester
a écrit dans le message de
news:
Question a la con : Admettons que vous deviez faire un tableau de stat
: ex sortir le nombre de clients par age : < 30 ans, 30 40ans, 40 50,
et > 50.
Vous faites 4 requetes ? ou 1 requete et tu traite les resultats de la
req avec une boucle ?

La j'ai un tableau de stats a faire, si je suis la premiere methode ca
me ferai 20 requetes... et avec la 2eme methode 5 requetes mais avec
une boucle pour chacune...

Quel est selon vs la meilleure methode ?



un fetch en table access full + gestion des ruptures dans les fetchs

en gros un
hlp
tant que pas endehors
selon age
cas <30 compteur1++
cas >0 et <40 compteur2++
fin
hls
fin

(je me pose de ces questions moi des fois ;) )



mais non
Avatar
mat
wrote:
Question a la con : Admettons que vous deviez faire un tableau de stat
: ex sortir le nombre de clients par age : < 30 ans, 30 40ans, 40 50,
et > 50.
Vous faites 4 requetes ? ou 1 requete et tu traite les resultats de la
req avec une boucle ?

La j'ai un tableau de stats a faire, si je suis la premiere methode ca
me ferai 20 requetes... et avec la 2eme methode 5 requetes mais avec
une boucle pour chacune...

Quel est selon vs la meilleure methode ?

(je me pose de ces questions moi des fois ;) )




Bonjour,

faire un test des deux solutions, puisqu'il n'y pas de règles fixes avec
des requêtes sur HF. Ce n'est pas trop compliqué, il me semble. Une
chose est relativement sure: s'il s'agit d'une requête multifichiers,
alors réduire le nombre de requêtes en faveur de boucles POUR TOUS sur
le résultat. Puisque les résultats sont en mémoire, les boucles sont bcp
plus rapides.

Salutations
mat
Avatar
sebNews
"mat" a écrit dans le message de
news:434aca53$
wrote:
> Question a la con : Admettons que vous deviez faire un tableau de stat
> : ex sortir le nombre de clients par age : < 30 ans, 30 40ans, 40 50,
> et > 50.
> Vous faites 4 requetes ? ou 1 requete et tu traite les resultats de la
> req avec une boucle ?
>
> La j'ai un tableau de stats a faire, si je suis la premiere methode ca
> me ferai 20 requetes... et avec la 2eme methode 5 requetes mais avec
> une boucle pour chacune...
>
> Quel est selon vs la meilleure methode ?
>
> (je me pose de ces questions moi des fois ;) )
>



Bonjour,
Pour moi, une seule requête
puis travail en mémoire sur la source de données.
( instruction SELON )

Sébastien
Avatar
ronando29
Merci pr les reponses.
nb : la bdd etait MySQL (j'avais oublié de préciser)
Avatar
ManuPavy
a écrit :
Merci pr les reponses.
nb : la bdd etait MySQL (j'avais oublié de préciser)




Moi, je ferai tout par une seule requete :

select "moins de 30", count(*) from table
where table.age < 30
union "entre 30 et 40", count(*) from table
where table.age >= 30
and table.age < 40
union ...

--
Manu
Avatar
ManuPavy
a écrit :
> Merci pr les reponses.
> nb : la bdd etait MySQL (j'avais oublié de préciser)
>

Moi, je ferais tout par une seule requete :

select "moins de 30", count(*) from table
where table.age < 30
union
select "entre 30 et 40", count(*) from table
where table.age >= 30
and table.age < 40
union
select "entre 40 et 50", count(*) from table
where table.age >= 40
and table.age < 50
union
select "plus de 50", count(*) from table
where table.age > 50

--
Manu
Avatar
Manu
"ManuPavy" wrote in message
news:dinrid$ddv$
a écrit :
> Merci pr les reponses.
> nb : la bdd etait MySQL (j'avais oublié de préciser)
>

Moi, je ferais tout par une seule requete :

select "moins de 30", count(*) from table
where table.age < 30
union
select "entre 30 et 40", count(*) from table
where table.age >= 30
and table.age < 40
union
select "entre 40 et 50", count(*) from table
where table.age >= 40
and table.age < 50
union
select "plus de 50", count(*) from table
where table.age > 50



sans vouloir jouer les puristes :
4 unions : 4 parcours de la table => _index sur age_ fortement recommandé
mais c'est pas le genre de colonne habituellement indexée
4 union : un traitement de dédoublonnage en plus => utilisation de _union
all_ recommommandé surtout que les ensembles ne se superposent pas
Avatar
ManuPavy
Manu a écrit :
"ManuPavy" wrote in message
news:dinrid$ddv$

a écrit :
> Merci pr les reponses.
> nb : la bdd etait MySQL (j'avais oublié de préciser)
>

Moi, je ferais tout par une seule requete :

select "moins de 30", count(*) from table
where table.age < 30
union
select "entre 30 et 40", count(*) from table
where table.age >= 30
and table.age < 40
union
select "entre 40 et 50", count(*) from table
where table.age >= 40
and table.age < 50
union
select "plus de 50", count(*) from table
where table.age > 50




sans vouloir jouer les puristes :
4 unions : 4 parcours de la table => _index sur age_ fortement recommandé
mais c'est pas le genre de colonne habituellement indexée
4 union : un traitement de dédoublonnage en plus => utilisation de _union
all_ recommommandé surtout que les ensembles ne se superposent pas



Oui, mais c'est mieux que 4 requetes + du code derriere.

Sinon :
select case
when table.age < 30 then "inf30"
when (table.age >= 30 and table.age <40) then "30-40"
when (table.age >= 40 and table.age <50) then "30-40"
when table.age > 50 then "sup50"
end as cat_age, count(*)
from table
group by cat_age


--
Manu
Avatar
Manu
> Sinon :
select case
when table.age < 30 then "inf30"
when (table.age >= 30 and table.age <40) then "30-40"
when (table.age >= 40 and table.age <50) then "30-40"
when table.age > 50 then "sup50"
end as cat_age, count(*)
from table
group by cat_age




Voici ce que j'avais proposé à l'époque mais si ton code fonctionne c'est
plus propre...

un fetch en table access full + gestion des ruptures dans les fetchs

en gros un
hlp
tant que pas endehors
selon age
cas <30 compteur1++
cas >0 et <40 compteur2++
fin
hls
fin