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

Développement SQL Server Discussion :

Problème avec les MAX


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Anguilla

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Par défaut Problème avec les MAX
    Bonjour tout le monde =)

    Voila mon soucis, j'utilise des MAX pour faire ressortir les valeurs maximales (normal :p) , le problème est qu'il prend les résultats indépendamment du reste.
    Exemple :
    Pour un Auteur y, je veux qu'il me sorte sa plus récente année d'activité, pour ensuite, chercher quel le livre le plus vendu cette année, pour ensuite savoir sur quel format il c'est le plus vendu. Et tout ça dans un seul datagridview.

    Mon problème est que j'obtiens des résultats indépendants du reste et tombe sur les valeurs maximales de toutes mes tables =/.
    Je n'ai pas ma requête sous la main, mais elle est du genre :

    SELECT Auteur, MAX(Année),... From Auteur FULL OUTER JOIN... GROUP BY Auteur WHERE Auteur =.....
    Merci d'avance =) (PS: Je suis sous SQL Server 2008)

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Utilisez plutôt une fonction de fenêtrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    row_number() over(partition by auteur order by annee desc, nb_vente desc, nb_vente_format desc)
    Ensuite vous filtrez sur les 1.
    Difficile d'en écrire plus car vous avez été assez avare sur votre code !

  3. #3
    Nouveau candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Anguilla

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Par défaut
    Après recherche cette fonction ne correspond pas très bien à ce que je voudrais faire. Mon but est de faire comme cité dans mon exemple du premier message :

    Pour un Auteur y, je veux qu'il me sorte sa plus récente année d'activité, pour ensuite, chercher quel le livre le plus vendu cette année, pour ensuite savoir sur quel format il c'est le plus vendu.
    Mais pour chaque auteur et le tout dans un seul datagridview. =/

    Voici ma requête un peu plus complète (enfin j'espère)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Auteur, MAX(Année), MAX(Vente_Livre), MAX(Vente_Format) 
    From Auteur 
    FULL OUTER JOIN Livre_Stats ON ID_Auteur=Num_Auteur ....  
    GROUP BY Auteur

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiante
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Par défaut
    Peut-être en rajoutant une clause WHERE du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Auteur, Année, Vente_livre, MAX(Vente_Format) 
    FROM Auteur 
    WHERE Vente_Livre  = (SELECT MAX(Vente_Livre) FROM Auteur WHERE Année  = (SELECT MAX(Année) FROM Auteur))
    ...
    Je ne connais pas trop le concept de datagridview donc je suis peut-être HS...

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 197
    Billets dans le blog
    1
    Par défaut
    Le pense que votre problème vient de votre jointure.

    Pourquoi FULL OUTER JOIN plutôt que LEFT OUTER JOIN ou même INNER JOIN ?

    Car à mon avis, un simple INNER JOIN répondrait mieux à votre problématique, et ça vous éviterait d'avoir des lignes "orphelines".

    Le FULL OUTER JOIN permet de ramener tous les auteurs, y compris ceux qui n'ont pas de lignes, ainsi que toutes les parutions, y compris celles sans auteur, en matchant ensemble les parution et les auteurs lorsqu'il y a un lien.

    A mon avis, votre besoin est simplement de lister tous les auteurs et récupérer toutes leurs parutions. Donc INNER JOIN

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    -- Pour un Auteur...
    WITH 
    UN_AUTEUR AS
    (SELECT Clef_Auteur 
     FROM   T_Auteur 
     WHERE  Auteur_Nom = 'dugudu'),
    -- je veux qu'il me sorte sa plus récente année d'activité
    PLUS_RECENT AS
    (SELECT L.Clef_Auteur, MAX(YEAR(DateParution)) AS LastAn 
     FROM   T_Livre AS L
            JOIN UN_AUTEUR AS S
                 ON L.Clef_Auteur = A.Clef_Auteur
     GROUP  BY L.Clef_Auteur),
    -- quel le livre le plus vendu cette année, 
    PLUS_VENDU AS
    (SELECT R.Clef_Auteur, R.LastAn, Format, COUNT(*) AS NB,
            RANK() OVER(PARTITION BY Format 
                        ORDER BY COUNT(*) DESC) AS RANG
     FROM   T_Vente AS V
            INNER JOIN PLUS_RECENT AS R
                  ON V.Clef_Auteur = R.Clef_Auteur
                     AND R.LastAn = YEAR(DateVente)
     GROUP  BY R.Clef_Auteur, R.LastAn),
    -- pour ensuite savoir sur quel format il c'est le plus vendu.
    PLUS_VENDU_FORMAT AS
    (SELECT *, RANK() OVER(ORDER BY NB DESC) AS N
     FROM   PLUS_VENDU
     WHERE  RANG = 1 )
    -- résultat :
    SELECT *
    FROM   PLUS_VENDU_FORMAT
    WHERE  N = 1

    La prochaine fois que vous postez MERCI DE RESPECTER LA CHARTE DE POSTAGE : http://www.developpez.net/forums/d96...vement-poster/


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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