1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

calculer le nombre de personne par tranche d'age

Discussion dans 'Résolution problème & conseils' créé par elhacene, Avr 5, 2018.

  1. elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    es que quelqu’un sait faire une requet ou un code assez court :cool:pour calculé le nombre de personne par tranche d'age a partiir de la date de naissance, !
     
  2. gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    399
    J'aime reçus:
    708
    un truc comme ça

    select MONTHS_BETWEEN (SYSDATE , a.dateNaissance)/(12) , code,a.sexe, count(*) from Personne a where ...........
    group by MONTHS_BETWEEN (SYSDATE , a.dateNaissance)/(12), a.sexe
    order by MONTHS_BETWEEN (SYSDATE , a.dateNaissance)/(12),a.sexe
     
    elhacene apprécie ceci.
  3. elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    un truc comme ça [10-15]ans =12 persone ; [16-20]=8 personne ....
     
  4. ProDev

    ProDev Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    371
    J'aime reçus:
    372
    Voila mais pas tester

    Code (Text):
    SELECT
    Count(DISTINCT Clients.NumClient) AS Clients
    From
    Clients
    Where
    WL.Age(Clients.Datenaissance)={parametre}

     
    Bon dev
     
    elhacene apprécie ceci.
  5. elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Voila mais pas tester

    Code (Text):
    SELECT
    Count(DISTINCT Clients.NumClient) AS Clients
    From
    Clients
    Where
    WL.Age(Clients.Datenaissance)={parametre}

     
    Bon dev
    Cliquez pour agrandir...
    ce code donne l'age mais moi je cherche a calculé le nombre de personne par tranche d'age ex entre 20ans et 25ans il y a 20 client afin de remplir un cha,p table par tranche d'age jusqu'a 60-65 par exemple
     
  • ProDev

    ProDev Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 11, 2018
    Messages:
    371
    J'aime reçus:
    372
    @

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    la tu dois faire des efforts pour trouver le reste

    Bon nuit;)
     
    elhacene apprécie ceci.
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368
    Essai avec ça, je n'ai pas de table sous la main, donc pas testé :
    WL.Age(Clients.Datenaissance) BETWEEN {Param1} AND {Param2}
     
    elhacene apprécie ceci.
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368
    Je viens de faire des tests avec une table de 20 000 clients récupérés sur randomuser.me.

    Et le mieux que j'ai pu faire en une seule fois, le voici :


    SELECT '10_20' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 10 AND 20
    UNION SELECT '21_30' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 21 AND 30
    UNION SELECT '31_40' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 31 AND 40
    UNION SELECT '41_50' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 41 AND 50
    UNION SELECT '51_60' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 51 AND 60
    UNION SELECT '60+' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) > 60

    Résultat en 2s 17 pour 20 000 dates de naissance (le compte est bon) :
    Code (Text):

    Enr     tranche     total
    1       21_30       3333
    2       31_40       3947
    3       41_50       3852
    4       51_60       3944
    5       60+         4924
    J'ai fait un autre test en utilisant MONTHS_BETWEEN à la place de la fonction Age :

    SELECT '10_20' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 10 AND 20
    UNION SELECT '21_30' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 21 AND 30
    UNION SELECT '31_40' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 31 AND 40
    UNION SELECT '41_50' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 41 AND 50
    UNION SELECT '51_60' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 51 AND 60
    UNION SELECT '60+' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) > 60

    Le résultat est toujours en dessous des 2s pour 20 000 dates, donc plus rapide, mais d'un rien.
     
    #8 FreudWD, Avr 6, 2018
    Dernière édition: Avr 6, 2018
  • gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    399
    J'aime reçus:
    708
    Good job, bravo
     
  • WX1331

    WX1331 Well-Known Member
    MEMBRE WX DUMP TEAM

    Inscrit:
    Jan 1, 2018
    Messages:
    610
    J'aime reçus:
    670
    Bon travail Freud

    bon développement.
     
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    @

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    la tu dois faire des efforts pour trouver le reste

    Bon nuit;)
    Cliquez pour agrandir...
    bin moi je sais le faire mais avec une requet qui trouve l'age et le reste par programmation en mettant des boucle sur la requet et algo assé grands et donc je voullez savoir si il existe une requet qui fait tous sa à la fois:D

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Je viens de faire des tests avec une table de 20 000 clients récupérés sur randomuser.me.

    Et le mieux que j'ai pu faire en une seule fois, le voici :


    SELECT '10_20' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 10 AND 20
    UNION SELECT '21_30' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 21 AND 30
    UNION SELECT '31_40' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 31 AND 40
    UNION SELECT '41_50' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 41 AND 50
    UNION SELECT '51_60' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) BETWEEN 51 AND 60
    UNION SELECT '60+' AS tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(LEFT(WL.Age(DateNaissance), 4) AS INTEGER) > 60

    Résultat en 2s 17 pour 20 000 dates de naissance (le compte est bon) :
    Code (Text):

    Enr     tranche     total
    1       21_30       3334
    2       31_40       3947
    3       41_50       3851
    4       51_60       3944
    5       60+         4924
    J'ai fait un autre test en utilisant MONTHS_BETWEEN à la place de la fonction Age :

    SELECT '10_20' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 10 AND 20
    UNION SELECT '21_30' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 21 AND 30
    UNION SELECT '31_40' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 31 AND 40
    UNION SELECT '41_50' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 41 AND 50
    UNION SELECT '51_60' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 51 AND 60
    UNION SELECT '60+' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) > 60

    Le résultat est toujours en dessous des 2s pour 20 000 dates, donc plus rapide, mais d'un rien.
    Cliquez pour agrandir...
    oh la , je vais testé tous sa c'est du jolie boulo je vais le mongé comme un cassecroute
     
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    dit moi

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    j'ai implante ton code dans windev ! et moi je travail toujours avec des requet graphique alors si je suis sur la bonne voie
    j'ai essayé de crée une nouvel requet avec codeSql dans l'assistant de windev puis j'ai collé ton code j'ai u une erreur de

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

     
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368
    Tu es tombé sur le bug de WD20 avec WL.Age, si tu utilises toujours WD20, tu devrais prendre la seconde requête avec MONTHS_BETWEEN :

    SELECT '10_20' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 10 AND 20
    UNION SELECT '21_30' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 21 AND 30
    UNION SELECT '31_40' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 31 AND 40
    UNION SELECT '41_50' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 41 AND 50
    UNION SELECT '51_60' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 51 AND 60
    UNION SELECT '60+' as tranche,COUNT(idclient) AS total FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) > 60
     
    gapplicat et elhacene aiment ça.
  • elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    j'ai obtenu sa

    freudWD
     

    Fichiers attachés:

    • age1.jpg
      age1.jpg
      Taille de fichier:
      84.9 KB
      Affichages:
      22
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368
    Aaahh les veilles versions, les agrégations n’était pas aussi souples que maintenant, la solution serait de sortir le texte de l’agrégat, mais j'ai plus simple encore.
    Au lieu d'avoir le résultat en colonne, tu auras le résultat en ligne, comme ça il n'en manquera pas :


    SELECT (SELECT COUNT(idclient) FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 10 AND 20) AS TR10_20
    ,(SELECT COUNT(idclient) FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 21 AND 30) AS TR21_30
    ,(SELECT COUNT(idclient) FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 31 AND 40) AS TR31_40
    ,(SELECT COUNT(idclient) FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 41 AND 50) AS TR41_50
    ,(SELECT COUNT(idclient) FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 51 AND 60) AS TR51_60
    ,(SELECT COUNT(idclient) FROM client_20000 WHERE CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) > 60) AS TR60

    Le résultat en colonne 1 : 10/20, 2 : 21/30 ... :
    Code (Text):
    TR10_20     TR21_30       TR31_40       TR41_50       TR51_60       TR60
    0           3333          3947          3852          3944          4924
    Maintenant, on a les tanches à 0.
     
  • akzo81

    akzo81 Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    47
    J'aime reçus:
    24
    Peut être une idée vue sur le net.A partir de l'âge que tu as calculé,
    tu divises l'age par 10 en ne gardant que la partie entière.
    (0 à 9 donne 0, 10 à 19 donne 1, ..., 100 à 109 donne 10
    SELECT CAST((age / 10) AS INTEGER) AS tranche


    ou
    select
    Count(IIf([naissance_adh] Between #01/01/1950# And #31/12/1959#,[naissance_adh])) AS [50-59],
    Count(IIf([naissance_adh] Between #01/01/1960# And #31/12/1969#,[naissance_adh])) AS [60-69]
    from adherents
     
    elhacene apprécie ceci.
  • Kill3rbko

    Kill3rbko Member

    Inscrit:
    Mar 8, 2018
    Messages:
    58
    J'aime reçus:
    21
    Chapeau Freud du sql :)
     
    elhacene apprécie ceci.
  • FreudWD

    FreudWD Well-Known Member
    MEMBRE WX WXG 21

    Inscrit:
    Jan 22, 2018
    Messages:
    199
    J'aime reçus:
    368

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Oui, la partie de division par 10 est le cas où (comme dans mon exemple) on a besoin des tranches par 10,
    mais si tu veux le pourcentage des mineurs, soit < 18, autant rester sur saisie des tranches.

    Pour la version conditionnelle, ta version est pour calculer les personnes nées dans les années 50 et 60.
    L'idée est bonne en la traduisant pour nous, mais HFSQL en agrégat conditionnelle, il faut que je regarde,
    mais je ne pense pas qu'ils en sont encore là, les deux en même temps ne doit pas fonctionner, mais je peux me tromper.

    Ce serait du genre :


    SELECT COUNT(CASE WHEN CAST(MONTHS_BETWEEN(SYSDATE,DateNaissance)/12 AS INTEGER) BETWEEN 20 AND 30 THEN 1 ELSE NULL END) FROM client_20000

    Mais ça ne fonctionne pas.

    Édit :
    Sur la version 20 de notre cher ami, mais je vais tester sur la 23.

    Édit 2 :
    Je confirme, ça ne fonctionne pas aussi sur la 23, en tout cas sous cette forme.
     
    #18 FreudWD, Avr 7, 2018
    Dernière édition: Avr 8, 2018
    elhacene apprécie ceci.
  • ajchaghab

    ajchaghab Member

    Inscrit:
    Jan 10, 2018
    Messages:
    18
    J'aime reçus:
    11
    Je confirme, ça ne fonctionne pas aussi sur la 23
     
  • rafik19

    rafik19 Member

    Inscrit:
    Jan 1, 2018
    Messages:
    35
    J'aime reçus:
    14
    Bon travail Freud
     
  • Partager cette page

    Chargement...