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 Procédural MySQL Discussion :

Procédure stockée nombre d'arguments dynamique


Sujet :

SQL Procédural MySQL

  1. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DROP TEMPORARY TABLE IF EXISTS mesperfs;
     
    CREATE TEMPORARY TABLE mesperfs ENGINE MEMORY SELECT SCE.id, POP.product_id, VOL.chf_volume,SCE.value
    FROM volumes as VOL
    INNER JOIN portfolios_products as POP on (VOL.product_id = POP.product_id)
    INNER JOIN product_scenarios AS SCE on (SCE.product_id = POP.product_id)
    WHERE POP.portfolio_id = 2 AND VOL.client_id = 3;
     
    SELECT id, SUM(chf_volume * value) / SUM(chf_volume) AS total FROM mesperfs
    GROUP BY id
    ORDER BY total DESC limit 10;
    Voilà une idée sur le principe que vous m'avez suggéré, mais là encore, je trouve 10 fois le même résultat (qui est faux d'ailleurs)... A quel niveau se trouve mon erreur ? Je pense que c'est au niveau du SUM et de la division, mais je n'arrive pas à formaliser autrement

  2. #22
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Voilà une idée sur le principe que vous m'avez suggéré, mais là encore, je trouve 10 fois le même résultat (qui est faux d'ailleurs)... A quel niveau se trouve mon erreur ? Je pense que c'est au niveau du SUM et de la division, mais je n'arrive pas à formaliser autrement
    N'ayant pas accès à vos données, la seul personne qui peut trouver d'où vient le problème, c'est vous.

    dégagez le group by / sum de la requete et analyser pour voir d'où vient le problème ..

    Si le mcd que vous avez présenté est le bon vous ne devriez avoir qu'une seule ligne par couple SCE.id, POP.product_id pour un même portfolio.

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Pour moi, les données que j'ai indiquées et le MCD sont bons. J'ai essayé de virer le GROUP BY ou le SUM mais cela ne change rien.

    Voici les données des 3 tables qui entrent en jeu :

    # product_scenarios
    ID | product_id | scenario | value
    1 18 0 0,04
    2 18 1 0,08
    3 18 2 0,03
    4 30 0 0,12
    5 30 1 0,07
    6 30 2 0,10
    7 45 0 0,02
    8 45 1 0,07
    9 45 2 0,08
    ...

    #volumes
    ID | product_id | volume | client_id
    1 18 1 000 000 3
    2 30 250 000 3
    3 45 350 000 3
    4 18 3 450 000 4
    5 78 1 760 000 3
    ...

    #portfolios_products
    ID | portfolio_id | product_id
    1 2 18
    2 2 30
    3 2 45
    4 3 18
    5 3 78
    ...

    Avec ces données, lorsque je fais la première requête pour remplir la table temporaire, j'obtiens bien une seule ligne par quadruplet SCE.scenario, POP.prod_id, VOL.volume, SCE.value, soit 9 lignes au total pour 3 produits avec 3 scénarios :

    scenario | product_id | volume | value
    0 18 1 000 000 0,04
    1 18 1 000 000 0,08
    2 18 1 000 000 0,03
    0 30 250 000 0,12
    1 30 250 000 0,07
    2 30 250 000 0,10
    0 45 350 000 0,02
    1 45 350 000 0,07
    2 45 350 000 0,08

    Mais lorsqu'ensuite je calcule les sommes en divisant par le volume total, alors le résultat est toujours le même et en plus il est faux...

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Bon, je ne sais pas trop pourquoi, mais je viens de refaire un test et j'obtiens enfin des résultats cohérents !

    Merci pour tout !

Discussions similaires

  1. Procédure stockée avec du SQL dynamique
    Par Violette133 dans le forum PL/SQL
    Réponses: 0
    Dernier message: 26/07/2014, 13h57
  2. Appel d'une procédure stockée ayant des arguments de type TABLE despuis du code C#
    Par rabddoul dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 23/10/2008, 10h47
  3. Réponses: 3
    Dernier message: 07/08/2008, 14h09
  4. Réponses: 6
    Dernier message: 04/07/2008, 08h25
  5. Réponses: 1
    Dernier message: 22/11/2006, 17h38

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