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

Requêtes MySQL Discussion :

Problème calcul erroné avec sum()


Sujet :

Requêtes MySQL

  1. #21
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Aliasses-les dans le SELECT et utilises les alias dans la sous-requête.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  2. #22
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2005
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Maljuna Kris Voir le message
    Aliasses-les dans le SELECT et utilises les alias dans la sous-requête.
    Pareil

    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
    Documentation
     
    SELECT v.imma_actif, g.km, g.date_max AS dmax, g.date_mini AS dmin, f.ca, f.ca / g.km AS calcul
    FROM vehicule v
    LEFT JOIN (
     
    SELECT gasoil.id_vehicule, MAX( gasoil.compteur ) - MIN( gasoil.compteur ) AS km, DATE( MAX( gasoil.`date` ) ) AS date_max, DATE( MIN( gasoil.`date` ) ) AS date_mini
    FROM gasoil
    WHERE DATE( gasoil.`date` )
    BETWEEN '2008-10-01'
    AND '2008-10-31'
    ) AS g ON g.id_vehicule = v.id_vehicule
    LEFT JOIN (
     
    SELECT sum( fl.prix ) AS ca, fl.id_vehicule
    FROM facture_ligne fl
    WHERE fl.date_voyage
    BETWEEN dmin
    AND dmax
    ) AS f ON f.id_vehicule = v.id_vehicule
     
    MySQL a répondu:
    #1054 - Unknown column 'dmin' in 'where clause'
    J'ai l'impression qu'il faille faire une sous-requête pour la sous_requête facture_ligne. Mais bon j'en sais rien, je ne vois absolument pas comment faire, car déjà le sous-requête corrélée, je n'aurai jamais trouvé, chapeau bas !

  3. #23
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    En fait les sous-requêtes ne sont pas corrélées, ce sont les clauses ON des jointures qui assument ce rôle.
    C'est bien le problème, c'est que là, avec date_max et date_mini, on essaye de corréler la sous-requête avec la requête mère, mais il n'accepte pas.
    Faire des sous-sous-requêtes corrélées avec la sous-requête nécessite d'en faire une pour chaque valeur du BETWEEN, ce qui va être rédhibitoire pour le serveur.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #24
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2005
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Bon Ok, j'ai trouver une solution, je ne vais plus me baser sur la table gasoil, mais géolocalisation.
    La requête sera sensiblement la même, au détail que je n'ai plus besoin de la sous-sous-requete. Ca va simplifier les calculs et donc c'est le serveur qui sera content.
    En tout cas je vous remercie tous pour votre aide, vous êtes super.

  5. #25
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2005
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Bon après avoir testé plus profondement, il fait absolument faire un GROUP BY pour chaque sous requêtes, et d'ailleurs le message d'erreur sur le serveur de production venait de là .
    Merci à tous

  6. #26
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Ce qui est assez logique, quand on y pense bien.
    Tu dois faire un GROUP BY g.id_vehicule par exemple bien que tu ne laisses passer qu'un seul g.id_vehicule dans la clause ON de la jointure.
    Mais cette jointure ne s'opère pas au même niveau, elle est en dehors des parenthèses de la sous-requête.
    Bien vu.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. problème de jointure avec calcul
    Par nine dans le forum Langage SQL
    Réponses: 20
    Dernier message: 11/06/2009, 16h35
  2. Problème de requete avec SUM
    Par fatiinfo dans le forum Hibernate
    Réponses: 2
    Dernier message: 27/08/2008, 16h18
  3. Problème calcul arithmétique avec des float
    Par tioneb369 dans le forum Langage
    Réponses: 4
    Dernier message: 18/09/2007, 14h35
  4. erreur de calcul avec SUM
    Par peyro51 dans le forum Excel
    Réponses: 6
    Dernier message: 14/07/2007, 09h14
  5. [SQL Access] Problème avec Sum()
    Par badgam piero dans le forum Access
    Réponses: 5
    Dernier message: 12/12/2005, 16h00

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