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

Langage SQL Discussion :

Requête SQL


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Points : 14
    Points
    14
    Par défaut Requête SQL
    Bonjour,

    Je fais actuellement une requête sur ma base de donnée qui est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT source, IQ, count( iterations ) 
    FROM activite
    WHERE retard = "00:00:00"
    AND source IN ( SELECT source FROM correspondance WHERE correspondance.IQ = activite.IQ )
    GROUP BY source, IQ
    ORDER BY source, IQ
    et la même pour les retards <> "00:00:00"

    Cette requête me convient parfaitement si ce n'est un détail.
    J'aimerais que TOUS mes correspondance.IQ ressortent même si il n'y a pas d'entrée équivalente dans activite.IQ ...

    Sauriez-vous m'aider s'il vous plaît ?

    Par avance, MERCI.
    Boueep

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Ca dépend du modèle de votre BDD, mais vous pouvez partir sur une jointure externe et voir ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ac.source, ac.IQ, count(ac.iterations) 
    FROM activite AS ac RIGHT OUTER JOIN correspondance AS co
        ON co.IQ = ac.IQ AND co.source = ac.source
    WHERE ac.retard = "00:00:00"
    GROUP BY ac.source, ac.IQ
    ORDER BY ac.source, ac.IQ

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    Bonjour et merci !

    Votre solution me donne le même résultat qu'avec la requête que j'utilise déjà.
    Soit 55 entrées.

    Hors j'attend un résultat de 84 entrées (autant qu'il y a d'entrée dans correspondance mais avec le count iterations sur "activite")

    J'ai continué à chercher de mon côté mais sans succès !

    Auriez-vous une autre idée de solution ?

    Merci encore.
    Boueep

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Essayez celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT co.source, co.IQ, count(*) nb_interations
    FROM activite AS ac RIGHT OUTER JOIN correspondance AS co
          ON co.IQ = ac.IQ
         AND co.source = ac.source
         AND ac.retard = "00:00:00"
    GROUP BY co.source, co.IQ
    ORDER BY co.source, co.IQ

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    Ca marche plutôt bien !
    En effet les 84 valeurs ressortent.

    Néanmoins, il me met des valeurs à "1" pour les entrées sans itérations.

    Est-il possible d'obtenir "0" ou rien ?

    Il doit me compter l'entrée de la table correspondance

    Mais c'est déjà un grand pas !
    Merci.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    On vient de me donner la solution (entourage proche)
    En lisant votre code, on m'a fait le modifier comme suit (en ca marche !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT co.source, co.IQ, count( iterations ) nb_iterations
    FROM activite AS ac
    RIGHT OUTER JOIN correspondance AS co ON co.IQ = ac.IQ
    AND co.source = ac.source
    AND ac.retard = "00:00:00"
    GROUP BY co.source, co.IQ
    ORDER BY co.source, co.IQ
    Merci pour votre aide précieuse, vraiment ! ! !
    Sujet Résolu

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    J'ai cru ce problème résolu ... mais il n'en est rien !

    La requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT co.source, co.IQ, co.techno, count( iterations ) nb_iterations
    FROM activite AS ac RIGHT OUTER JOIN correspondance AS co ON co.IQ = ac.IQ
    AND co.source = ac.source
    AND ac.retard = '00:00:00'
    AND ac.date_envoi >= STR_TO_DATE('".addslashes($periode_debut)."', '%d/%m/%Y')
    AND ac.date_envoi <= STR_TO_DATE('".addslashes($periode_fin)."', '%d/%m/%Y')
    GROUP BY co.source, co.IQ
    ORDER BY co.source, co.IQ

    Ne fonctionne pas.
    En effet, elle ne fait pas l'addition des valeurs dans le champ itérations mais l'addition des résultats.

    Soit pour 3 entrées (par ex) avec des itérations à 3, 12 et 27 un résultat de 3 et non de 42

    Pouvez-vous m'aider SVP ?

    Merci d'avance.
    Boueep

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    En utilisant SUM(iterations) à la place de COUNT(iterations) ça devrait être bon

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Points : 14
    Points
    14
    Par défaut
    En effet c'est bon !

    Merci mille fois pour ton aide

    Entre cette requête et le language PHP, on pourra dire que j'aurais apprit beaucoup aujourd'hui !

    Merci encore car ça n'aura pas été sans ton aide.

    Bien à toi.
    Boueep

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Celà dit, je vais vous faire un commentaire "SQLPro", mais la qualité des réponses dépend toujours de la qualité du problème posé :

    Si dès le départ vous fournissez la structure (vous pouvez appeller vos tables "toto" si vous le désirez), un jeu d'essai (quelques inserts, en général une dizaine suffisent) et ce que vous attendez, il y a de très forte chance d'avoir une solution correcte dès la première réponse, tout simplement parce qu'on peut tester ce qu'on vous propose !

    Prenez le temps de bien expliquer votre environnement (SGBD & DDL) et votre problème (votre SQL & ce que vous attendez), ça évite de jouer aux devinettes et au final vous gagnerez du temps, et nous aussi (et le temps, c'est des €, enfin parait-il, il neige un peu en ce moment).

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

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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