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 :

PB de calcul


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut PB de calcul
    Bonjour,

    Je vous explique mon problème.
    Tout d'abord je suis sous Informix (SGBD).

    On part d'une table "client" obtenu après un SELECT classique. Cette table contient x rangées. Le but est d'arriver à une table finale type result qui contient six indicateurs extrait de la table "client".

    la table client contient plusieurs "boutiques", il faut donc regrouper les 6 indicateurs par "boutiques".

    Exemple de rangées:

    Date, heure, nom boutique, achat, achat annulé,date paiement, heure paiement, contentieux, carte fidelité,


    1er indicateur :
    Nombre total d'achat + nbre total d'achat annulés

    2eme indicateur :
    Nbre total de paiement hors délai (au dela de 24h)

    3eme indicateur :
    Nbre d'achat transmis au contentieux

    4eme indicateur :
    Nbre d'achat payé en moins de 48h


    5eme indicateur :
    Somme total des délais de paiement en minute

    6eme indicateur :
    Nbre total des achats avec carte fidélite (3 types de cartes)

    Allez pour pimenter le tout sachez que les délais sont exprimés en minutes et que l'on doit tenir compte des heures ouvrées.
    Exemple : une boutique est ouverte de 08h30 à 17h30 du lundi au vendredi
    Un achat est effectue le vendredi à 17h15. Il ne sera enregistré que le lundi à 09h00. Le délai ne sera que de (15 minutes + 30 minutes = 45 minutes)

    Si vous avez des idées !!!!

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Différence de résultat
    Bonjour,

    je vais essayé de séquencer ma demande précédente car elle est un peu "lourde".

    Voilà le problème. Je suis sous Informix version 7 avec ISQL. Je développe avec 4Gl.
    Je bloque sur ce truc depuis lundi..... je sais ça doit être tout simple....
    Mon application décharge des données de la base dans une table temporaire.
    Il faut ensuite effectuer des calculs avec les données de cette table.

    Le premier de ces calculs consiste à donner le nombre total d'enregistrement par agence.

    J'ai définie une variable de type l_count, ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT COUNT(*) INTO l_count FROM table
    Il faut ensuite calculer le nbre d'enregistrement ayant certains critère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Variable = l_count1
    SELECT COUNT(*) INTO l_count2 FROM table WHERE....
    Il faut enfin faire la somme des deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Variable l_count0
    l_count0 = l_count + l_count1
    Le problème est que cela donne un résultat global, et non par agence.
    Avez vous une idée pour effecuter ce dispatch ?
    Y a t-il moyen de faire cela en une seule étape ?

    Merci

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Il faut passer par des sous-requêtes (tables dérivées) et des regroupements :
    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
    24
    SELECT    l0.idgroupe
        ,    l0.l_count0
        ,    COALESCE(l1.l_count1, 0)
        ,    COALESCE(l2.l_count2, 0)
    FROM    
            (    SELECT     idgroupe
                    ,    COUNT(*) AS l_count0 
                FROM     table 
            )    AS l0
        LEFT JOIN
            (    SELECT     idgroupe
                    ,    COUNT(*) AS l_count1 
                FROM     table 
                WHERE    condition1
            )    AS l1
            ON    l0.idgroupe = l1.idgroupe
        LEFT JOIN
            (    SELECT     idgroupe
                    ,    COUNT(*) AS l_count2 
                FROM     table 
                WHERE    condition2
            )    AS l1
            ON    l0.idgroupe = l2.idgroupe
    ;
    J'ai ajouté un regroupement sur une autre condition pour montrer comment multiplier les colonnes

Discussions similaires

  1. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  2. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

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