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

MS SQL Server Discussion :

Imbriquer un SELECT avec un GROUP BY


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut Imbriquer un SELECT avec un GROUP BY
    Soit une table T à deux colonnes (C1,C2) remplie comme suit :
    A | 1
    A | 3
    A | 2
    B | 9
    B | 8
    B | 7

    je souhaite trouver la requête qui me renverrai :
    A | 3
    B | 9

    (c'est-à-dire les occurences uniques sur C1 qui ont la plus grande valeur sur C2)

    J'ai trouvé une solution, mais qui ne marche que sur mySQL (et pas sur SQL Server !)

    J'ai procédé en deux étapes :
    étape 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT c1,c2 FROM t ORDER BY c2 DESC
    qui me renvoi :
    B | 9
    B | 8
    B | 7
    A | 3
    A | 2
    A | 1

    étape 2 :
    je fait un "GROUP BY" sur le c1 de la table retournée à l'étape 1 pour éliminer les doublons (en tout cas sous mySQL le group by me retourne la première occurence qu'il trouve, donc ça tombe bien)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT c1,c2 FROM (SELECT c1,c2 FROM t ORDER BY c2 DESC) AS temp GROUP BY c1
    Ce qui me renvoi dans mySQL :
    A | 3
    B | 9

    et dans SQL SERVER :
    Erreur dans la clause ORDER BY. Impossible d'analyser le texte de la requête.
    La clause ORDER BY n'est pas valide dans les vues, les fonctions Inline, les tables et les sous-requêtes, sauf si TOP est étgalement spécifié

  2. #2
    Membre expérimenté
    Inscrit en
    Février 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 185
    Par défaut
    Salut,
    utilises le de cette maniere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select nom,max(nombre) from occurence
    group by nom

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4
    Par défaut
    Merci djlixfe <-- tu es un amour, ça marche vraiment super bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT c1,max(c2) FROM t GROUP BY c1
    Réponse rapide, efficace, un grand merci. Tu as fait un heureux

    (de surcroit ce code ne nécessite pas d'imbrications, les performances seront donc sans doute bien meilleures. Elle marche aussi sur MySQL ! Ma requête était vraiment trop nulle en comparaison )


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

Discussions similaires

  1. select avec group by sur la date la plus recente
    Par maysa dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/07/2010, 12h02
  2. requete select avec group by
    Par lekonquerant dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/09/2009, 14h28
  3. [SQL Server 2000] SELECT avec CASE et GROUP BY
    Par strat0 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/03/2008, 18h45
  4. requête select avec un if imbriqué
    Par celiaaa dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/12/2006, 14h32
  5. selection avec group by mais ne garder que ...
    Par Larson dans le forum Langage SQL
    Réponses: 13
    Dernier message: 22/06/2005, 17h23

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