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 :

filtrer résultat calcul


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Points : 529
    Points
    529
    Par défaut filtrer résultat calcul
    Bonjour,

    J'effectue un calcul entre deux champs et j'aimerai ne récupérer que les résultats inférieur à une valeur, par exemple 10.

    Ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT `table`.`champ1`,`table`.`champ2`,
    `table`.`champ3`+`table`.`champ4` as somme
    from `table` 
    order by somme ASC;
    J'avais pensé à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT `table`.`champ1`,`table`.`champ2`,
    `table`.`champ3`+`table`.`champ4` as somme
    from `table` 
    WHERE somme < 10
    order by somme ASC;
    mais cela ne fonctionne pas.

  2. #2
    Membre confirmé
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Points : 529
    Points
    529
    Par défaut
    Je pense avoir trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT `table`.`champ1`,`table`.`champ2`,
    `table`.`champ3`+`table`.`champ4` AS somme
    FROM `table` 
    HAVING somme < 10
    ORDER BY somme ASC;
    Vous confirmez ? Merci

  3. #3
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Bonjour,

    Il me semble que vous devez passer par un GROUP BY et faire la clause dans le HAVING.

    EDIT: bien vu! Mais testez quand même car je dis ça de mémoire.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Ca ne me semble pas très conforme au SQL cette syntaxe, pour moi le having n'a un sens que s'il est utilisé conjointement à une fonction d'agrégation SUM, count, avg, min, max,etc.

    Voilà comment j'écrirais la requete :
    Option 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT `table`.`champ1`,`table`.`champ2`,
    `table`.`champ3`+`table`.`champ4` AS somme
    FROM `table` 
    WHERE `table`.`champ3`+`table`.`champ4` < 10
    ORDER BY somme ASC;
    Option 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT champ1,champ2, somme
    from (
     
    	SELECT `table`.`champ1`,`table`.`champ2`,
    	`table`.`champ3`+`table`.`champ4` AS somme
    	FROM `table` 	
    	) as T
    WHERE somme < 10
    a+
    Soazig

  5. #5
    Membre confirmé
    Avatar de ilood
    Inscrit en
    Mars 2005
    Messages
    468
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 468
    Points : 529
    Points
    529
    Par défaut
    Citation Envoyé par soazig Voir le message
    Option 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT `table`.`champ1`,`table`.`champ2`,
    `table`.`champ3`+`table`.`champ4` AS somme
    FROM `table` 
    WHERE `table`.`champ3`+`table`.`champ4` < 10
    ORDER BY somme ASC;
    Option 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT champ1,champ2, somme
    from (
     
    	SELECT `table`.`champ1`,`table`.`champ2`,
    	`table`.`champ3`+`table`.`champ4` AS somme
    	FROM `table` 	
    	) as T
    WHERE somme < 10
    L'option 1 fonctionne, mais avec l'option 2 j'ai lerreur SQL "champ1" n'existe pas

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Les alias de colonnes du SELECT sont évalués après le WHERE.
    Il faut donc reprendre l'expression complète dans ce dernier comme vous l'a proposé Soazig dans la première option.

    La seconde fonctionnera (si vous remettez les ` au niveau des noms de colonne) aussi bien mais est trop verbeuse à mon goût.

Discussions similaires

  1. [XL-2003] enregistrer résultats calculs dans un fichier texte
    Par Dokko974 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/07/2009, 09h02
  2. [XL-97] Ecrire résultat calcul dans une colonne déterminée
    Par Bocage dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2009, 18h24
  3. Réponses: 1
    Dernier message: 21/03/2008, 10h24
  4. Résultat calculé dans un pied de page DataReport
    Par jimmy-sept dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/04/2007, 17h12
  5. [MySQL] Affichage d'un résultat calculé à partir d'une bd
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 31/01/2006, 16h40

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