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 :

[SELECT] Champ crée dans la requête


Sujet :

PostgreSQL

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2004
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 291
    Par défaut [SELECT] Champ crée dans la requête
    Bonjour à tous,

    j'aimerais savoir si on peut réutiliser dans le select un champ qui vient d'être créé dans ce même select.
    Voici un exemple bidon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 1*6.55957 as euros, euros / 1.12 as dollars;
    Ce code ne s'exécute pas correctement, puisqu'il ne reconnaît pas le champ "euros".
    Cette question vient du fait que le champ nouvellement créé comporte pas mal de calculs, et le fait de les réécrire dans les autres champs du SELECT quand j'en ai besoin, rend illisible le code et autres contraintes.

    1) Est-ce possible ?
    2) Savez-vous en terme de performances si cela pourrait rendre l'exécution du code beaucoup plus longue ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    1) Est-ce possible ?
    La réponse est dans ton message !
    Citation Envoyé par gui80 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 1*6.55957 as euros,euros / 1.12 as  dollars;
    Ce code ne s'exécute pas correctement, puisqu'il ne reconnaît pas le champ "euros".
    Cette question vient du fait que le champ nouvellement créer comporte pas mal de calcul, et le fait de les réécrire dans les autres champs du SELECT quand j'en ai besoin, rend illisible le code et autres contraintes.
    Pour rendre le code lisible, aère le et utilise les indentations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 1*6.55957 as euros,
      1*6.55957 / 1.12 as dollars
    Si vraiment ta formule est compliquée et est utilisée souvent, tu peux aussi créer une fonction ou peut-être un type.

    2) Savez-vous en terme de performance si cela pourrait rendre l'exécution du code, beaucoup plus longue ?
    Fais voir la formule et dis nous plus précisément ce qu'elle est censée faire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Bon... en assumant que tu ne connais pas d'avance la valeure de "6.55957" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select euros, euros/1.12 as dollars
      from (select 1*6.55957 as euros)

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2004
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 291
    Par défaut
    Pour rendre le code lisible, aère le et utilise les indentations :
    C'est surtout d'avoir des bouts de code redondants qui m'agace si tu préfères.

    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
    SELECT CASE 
    WHEN unite_composition = '%' THEN dose_ha * concentration_composition * 10 * surface_traitee / surface_totale
    	ELSE dose_ha * concentration_composition * surface_traitee / surface_totale
    END as qtema,
    CASE
    WHEN unite_composition = '%' THEN 
    	CASE
    		WHEN (dose_ha * concentration_composition * 10 * surface_traitee / surface_totale) > 500 THEN 3
    		ELSE 1
    	END
    ELSE
    	CASE
    		WHEN (dose_ha * concentration_composition * surface_traitee / surface_totale) > 500 THEN
    		ELSE 1
    	END
    END as classema
    FROM ...
    Il y a plusieurs tables appelées. Il s'agit d'une vue.

    La solution proposée par mmazerolle est intéressante (oui, le cas "euros" était complètement bidon) mais comme cette vue est appelée avec une condition WHERE, je ne pense pas pouvoir utiliser cette solution puisqu'il faudrait appliquer cette même condition WHERE à cette table temporaire.

Discussions similaires

  1. Selection d'un champ spécifique dans une requête d'analyse croisé
    Par doudou31 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 09/09/2008, 16h34
  2. Formatage de champ cumul dans unr requête
    Par chim33 dans le forum Access
    Réponses: 3
    Dernier message: 25/01/2006, 15h22
  3. Champ calculé dans une requête
    Par HUÏEZ Fabienne dans le forum Access
    Réponses: 3
    Dernier message: 08/12/2005, 12h31
  4. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 17h36
  5. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02

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