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 le top 1 sur la base d'une colonne


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2023
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Filtrer le top 1 sur la base d'une colonne
    Bonjour à tous,

    Je commence SQL donc si le code ne ressemble à rien je m'en excuse d'avance.

    Je souhaite obtenir ce résultat qui correspond à la valeur maximale par CustomerCategoryName.

    Nom : requete filtrée.png
Affichages : 118
Taille : 10,2 Ko

    J'arrive à obtenir les données dans leur exhaustivité mais pas à les filtrer :

    Nom : requete non filtrée.png
Affichages : 107
Taille : 37,2 Ko

    Si vous pouviez m'aider et surtout m'expliquer pour que je sache le reproduire à l'avenir

    Bonne journée à tous

    Voici ci-dessous le code que j'utilise :

    Code SQL : 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
    SELECT 
    CustomerCategoryName
    , SUM (MAXLOSS) as MAXLOSS
    , O.CustomerID
    , CustomerName
     
    FROM Sales.orders as O
    LEFT JOIN Sales.OrderLines C on O.OrderID=C.OrderID
    LEFT JOIN Sales.Customers D on O.CustomerID=D.CustomerID 
    LEFT JOIN Sales.CustomerCategories K on D.CustomerCategoryID=K.CustomerCategoryID
     
    WHERE NOT EXISTS
    (
    	SELECT *
    	FROM Sales.Invoices as I
    	Where I.OrderID=O.orderID)
     
     
    Group by CustomerCategoryName,O.CustomerID, CustomerName
     
    Order by MAXLOSS DESC

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 344
    Points : 39 745
    Points
    39 745
    Billets dans le blog
    9
    Par défaut
    Bonjour

    Rechercher le plus petit, le plus grand, le plus récent, le plus ancien est une demande très récurrente, c'est pourquoi je lui ai consacré un billet de blog que vous trouverez ICI

    Par ailleurs, pensez à encadrer le code avec les balises prévues à cet effet.
    Pour ce faire, sélectionnez le code puis cliquez sur l'icone #, puis ajoutez le nom du langage après la balise de début.
    Par exemple [CODE=SQL]
    Ça permet d'activer automatiquement la coloration syntaxique associée, c'est plus facile à lire

    J'ai corrigé votre sujet pour ajouter ces balises, mais pensez-y pour la prochaine fois

    PS : pour un début, votre requête n'est pas si mal
    Juste une remarque au sujet des alias : tant qu'à faire d'en utiliser, ce qui est très bien, il est préférable d'utiliser des alias un peu plus parlants que de simples lettres par exemple ORD pour order, ORL pour order_line, CUS pour customer, etc.
    Pensez aussi à mettre ces alias dans toutes les parties de la requête (colonnes du SELECT, du GROUP BY...), ça facilite la maintenance

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    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 902
    Points : 53 143
    Points
    53 143
    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
    WITH T AS
    (
    SELECT 
    CustomerCategoryName
    , SUM (MAXLOSS) as MAXLOSS
    , RANK() OVER(PARTITION BY CustomerCategoryName ORDER BY SUM (MAXLOSS) DESC) AS N
    , O.CustomerID
    , CustomerName
    FROM Sales.orders as O
    LEFT JOIN Sales.OrderLines C on O.OrderID=C.OrderID
    LEFT JOIN Sales.Customers D on O.CustomerID=D.CustomerID 
    LEFT JOIN Sales.CustomerCategories K on D.CustomerCategoryID=K.CustomerCategoryID
    WHERE NOT EXISTS
    (
    	SELECT *
    	FROM Sales.Invoices as I
    	Where I.OrderID=O.orderID)
    Group by CustomerCategoryName,O.CustomerID, CustomerName
    )
    SELECT *
    FROM   T
    WHERE N = 1
    Order by MAXLOSS DESC;
    A me lire : https://sqlpro.developpez.com/articl...clause-window/

    A +

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2023
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Merci !
    Merci beaucoup à tous les deux. De cette manière j'ai pu comprendre et reproduire !
    J'ai bien noté pour les # et les alias plus parlants et partout.

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

Discussions similaires

  1. [SP 2010] Filtrer une liste externe sur la base d'une selection multiple
    Par madib dans le forum Développement Sharepoint
    Réponses: 1
    Dernier message: 16/07/2014, 15h28
  2. Comment filtrer des lignes sur la valeur d'une colonne
    Par BerBiX dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/06/2010, 13h46
  3. Implémenter une FIFO sur la base d'une LIFO
    Par Baptiste Wicht dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 13/10/2009, 17h06
  4. Filtrer une liste sur les valeurs d'une colonne
    Par julien.63 dans le forum SharePoint
    Réponses: 3
    Dernier message: 13/02/2009, 08h43
  5. Réponses: 6
    Dernier message: 04/11/2008, 22h35

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