IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

requetes imbriquée ne marche pas


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Points : 85
    Points
    85
    Par défaut requetes imbriquée ne marche pas
    Bonjour,

    J'aimerais calculer le nombre de partenaires actifs moyen par pays.
    Donc mon calcul est nb partner actif total / nb pays.

    pour obtenir nb partner actif:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*)
    from partners p
    where p.delete_flag='N'
    pour obtenir le nombre de pays total:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select count(*)
    from countries
    or je voudrais regrouper ces 2 requêtes en une seule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select count(*) / (select count(*)
                               from countries)
    from partners p
    where p.delete_flag='N'
    mais ça ne marche pas
    Si quelqu'un a une idée!!
    merci d'avance
    claire

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    mais ça ne marche pas
    n'a jamais trop aidé à résoudre les problèmes.. mieux vaut donner l'erreur ORA-00937 not a single-group group function

    Bref, le (select) n'est pas groupé (pour le premier count)

    Donc fait un max sur le sous select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(*) / MAX(SELECT count(*) FROM countries)
    FROM partners p
    WHERE p.delete_flag='N'
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Salut claire13,

    Peut etre comme sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT (SELECT count(*) FROM partners p WHERE p.delete_flag='N')/(SELECT count(*) FROM countries)
    JB

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Points : 85
    Points
    85
    Par défaut
    merci de ta réponse mais ça ne marche pas. C'est dingue, ça parait simple comme requête et je galère depuis ce matin!!

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par claire13 Voir le message
    merci de ta réponse mais ça ne marche pas. C'est dingue, ça parait simple comme requête et je galère depuis ce matin!!
    Excuse moi, j'ai pas repris mon code exact. Un max sur un select demande un () de plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(*) / MAX( (SELECT count(*) FROM countries) )
    FROM partners p
    WHERE p.delete_flag='N'
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Points : 85
    Points
    85
    Par défaut
    bon j'ai trouvé quelque chose dans le forum:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select avg(t.nb_partner_actif)from
    (
    select a.country,count(p.partner_code) as nb_partner_actif
    from partners p, partner_profile pp,partners_addresses pa,addresses a
    where p.partner_code=pa.partner_code
    and pa.addr_code=a.addr_code
    and p.partner_code=pp.partner_code
    and pa.address_type='000'
     
    and p.delete_flag='N'
    and pp.partner_status is null
    group by a.country)t
    la requête qui me donne ma table t me donne la liste des pays et le nombre de partners actifs associés. J'ai donc fait la moyenne sur ce résultat.

    Mais au final je voulais la liste des pays dont le nombre de partners actifs est supérieurs à cette moyenne, ce qui me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    select a.country,count(p.partner_code) as nb_partner_actif
    from partners p, partner_profile pp,partners_addresses pa,addresses a
    where p.partner_code=pa.partner_code
    and pa.addr_code=a.addr_code
    and p.partner_code=pp.partner_code
    and pa.address_type='000'
     
    and p.delete_flag='N'
    and pp.partner_status is null
    group by a.country
    having count(p.partner_code)>
    (select avg(t.nb_partner_actif)from
    (
    select a.country,count(p.partner_code) as nb_partner_actif
    from partners p, partner_profile pp,partners_addresses pa,addresses a
    where p.partner_code=pa.partner_code
    and pa.addr_code=a.addr_code
    and p.partner_code=pp.partner_code
    and pa.address_type='000'
     
    and p.delete_flag='N'
    and pp.partner_status is null
    group by a.country)t)
    Beaucoup de répétition...
    Y-aurait-il un moyen de la simplifier un peu?

    merci encore
    claire

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT
        (SELECT count(*) FROM partners p WHERE p.delete_flag='N')
        / (SELECT count(*) FROM countries) as moyenne
    FROM dual

  8. #8
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Points : 85
    Points
    85
    Par défaut
    MAGNIFIQUE!!! merci beaucoup, c'est déjà beaucoup plus simple.

    et ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] condition avec requete qui ne marche pas ..sous ie
    Par esti89 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/06/2008, 09h53
  2. pb de requete qui ne marche pas sur pl sql
    Par smartsorft dans le forum SQL
    Réponses: 6
    Dernier message: 15/01/2008, 15h14
  3. Requete sql qui marche pas
    Par jahno dans le forum WinDev
    Réponses: 1
    Dernier message: 20/07/2007, 12h17
  4. Réponses: 1
    Dernier message: 11/04/2007, 16h11
  5. inner join pour requete update ne marche pas
    Par Garra dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/01/2006, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo