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 :

Retourner SUM() et autres valeurs d'une autre requête


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 35
    Points
    35
    Par défaut Retourner SUM() et autres valeurs d'une autre requête
    Bonjour,

    J'ai un petit problème concernant la récupération des autres valeurs avec le MAX()

    Voici ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT MAX(t),c,d FROM
    (
       SELECT SUM(Prix) AS t,Nom AS c,Date AS d 
       FROM Bil,Claus 
       WHERE Bil.Id = Claus.Id  
       GROUP BY Bil.Num
    ) AS p;
    Je récupère normalement le MAX(t), mais pour le c,d j'ai d'autres valeurs qui ne concernent pas le ce max mais qui concernent la première ligne du résultat de la requête internet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SUM(Prix) AS t,Nom AS c,Date AS d 
    FROM Bil,Claus 
    WHERE Bil.Id = Claus.Id  
    GROUP BY Bil.Num
    je pense qu'il me manque un test j'attends vos réponses et merci d'avance

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Bonjour :
    1/ Préférez les jointures SQL-92 (INNER JOIN) : votre méthode est illisible et désuette depuis 20 ans.
    2/ Pour moi, il manque un GROUP BY c,d tout à la fin de votre requête
    3/ Visiblement, vous utilisez MySQL (y'a que lui qui peut laisser passer une telle requête sans rien dire... et faire de la merde évidement) : changez de SGBD.
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 35
    Points
    35
    Par défaut Re
    J'ai ajouté un GROUP BY mais ça n'a pas marché,ce que je veux c'est de récupérer les c,d correpondant a ce SUM() parce que le c,d que j'ai, ne correspond pas a ceux qui appartiennent a ce SUM()

  4. #4
    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
    Bonjour,

    Votre requête initiale n'a aucun sens.

    Lisez ceci : http://sqlpro.developpez.com/cours/sqlaz/ensembles/

    Donc on ré-écrit avec la bonne syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT SUM(Prix) AS t,Nom AS c,Date AS d 
    FROM Bil
    inner join Claus on Bil.Id = Claus.Id  
    GROUP BY Nom , Date
    Ensuite, au vu de la demande, je pense qu'il faudrait plutôt partir sur ce genre de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT bil.id, max(prix) as max_prx, SUM(Prix) AS t, max(Nom) AS c,max(Date) AS d 
    FROM Bil
    inner join Claus on Bil.Id = Claus.Id  
    GROUP BY bil.id

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Vu que tu as l'air d'utiliser MySQL, je te suggère cette syntaxe, qui n'est pas standard du tout, mais qui va t'éviter de mettre MySQL à genoux avec du SQL propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT SUM(Prix) AS t,Nom AS c,Date AS d 
    FROM Bil inner join Claus on Bil.Id = Claus.Id  
    GROUP BY Nom, Date
    order by t desc
    limit 1;
    PS : Je ne comprends pas du tout comment ta requête peut marcher avec les GROUP BY que tu as mis... MySQL, c'est vraiment de la bonne bouse des familles...
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 35
    Points
    35
    Par défaut re
    merci problème résolu, et je vais essayer de migrer à Oracle

  7. #7
    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
    Même si je ne partage pas l'avis "changez de sgbd car vous êtes sur MySql", vous avez postgresql qui devrait vous suffire (au vu de la solution MySql retenue) et qui est vraiment beaucoup plus simple d’accès qu'Oracle, de mon point de vue

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !
    Par contre avec Oracle, on se marre plus

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

Discussions similaires

  1. [Débutant] Création colonne basée sur une autre valeur d'une autre colonne
    Par lFantasyz dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/02/2014, 16h41
  2. [XL-2010] Récupérer une valeur d'une autre cellule d'une autre feuille
    Par psylo24 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2012, 18h03
  3. [XL-2007] Récuperer les 4 Premieres valeurs supérieur à une autre valeur
    Par valoji dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/06/2010, 09h11
  4. [AC-2000] Remplacer une valeur par une autre à partir d'une requête
    Par tibogaet dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/08/2009, 14h23
  5. Remplacer une valeur par une autre valeur
    Par Prekestolen dans le forum Formules
    Réponses: 2
    Dernier message: 23/02/2009, 17h18

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