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

PostgreSQL Discussion :

Calcul d'une base 100


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Par défaut Calcul d'une base 100
    Bonjour à tous,

    je suis actuellement en stage et j'ai besoin de réaliser un calcul en base 100 sur des données. Mon maître de stage souhaite optimiser au mieux l'application et donc traiter cela directement en sql.

    Voici un exemple de données récupérées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW graphe_1 AS SELECT nom_territoire, annee, statistique FROM "STAT_ANNEE" SA, "INDICATEUR" I, "FICHIER" F, "DONNEE" D, "TERRITOIRE" T
    WHERE F.id_fichier=D.id_fichier
    AND D.id_donnee=SA.id_donnee
    AND I.id_indicateur=F.id_indicateur
    AND SA.id_territoire=T.id_territoire
    AND D.nom_donnee LIKE 'EN10 Consommation totale d''énergie par le résidentiel%'
    Qui va me renvoyer par exemple:
    "CENTRE";1990;2379
    "CENTRE";1992;2808
    "CENTRE";1995;2613
    "CENTRE";1997;2747
    "CENTRE";1999;2888
    "CENTRE";2002;2758

    Le calcul se fait ainsi:
    - je choisi l'année de base, 2002, qui est donc égal a 100
    - j'effectue le calcul suivant pour toutes les autres années:
    1990 : 2379/2758*100 = 86.26
    1992 : 2808/2758*100 = 101.81
    1995 : 2613/2758*100 = 94.74
    etc...

    Au final, je souhaite un résultat du genre:
    annee;base_100
    1990;86.26
    1992;101.81
    1995;94.74
    2002;100

    Déjà, est-ce possible de réaliser ce genre de calcul en SQL?
    Si oui, je me pose la question de savoir avec quelle méthode, une procédure, une fonction, un curseur (sachant que c'est lent), peut-être même une vue?

    Je vous remercie d'avance pour vos réponses.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Vous pouvez faire quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT 
        nom_territoire
        , annee
        , statistique / (
        SELECT statistique base
        FROM graphe_1
        WHERE annee = 2002
     ) * 100
    FROM graphe_1
    En précisant dans la sous requête la condition pour obtenir votre base (de sorte à n'avoir qu'une seule ligne...)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Par défaut
    Ah ouiii, je ne savais pas que c'est possible de faire ça!

    Ça marche merci beaucoup

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/11/2011, 19h54
  2. Calculs sur une base
    Par superthx dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/06/2010, 04h52
  3. Calcul dans une base
    Par Happock dans le forum Access
    Réponses: 28
    Dernier message: 25/09/2006, 12h45
  4. Calcul dans une base de donnée paradox
    Par Whinespirit dans le forum Bases de données
    Réponses: 49
    Dernier message: 16/05/2006, 15h28
  5. Réponses: 7
    Dernier message: 21/03/2006, 13h01

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