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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Methode
    Inscrit en
    juillet 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Methode

    Informations forums :
    Inscription : juillet 2018
    Messages : 19
    Points : 12
    Points
    12

    Par défaut Requête sum et ne garder que les 10 résultat les plus grands

    Bonjour,

    Je souhaites effectuer la sum de 20 colonnes et n'afficher que celle qui ont les 10 plus grande valeur, est-ce possible , pouvez-vous m'aiguiller.

    Merci.

    Cordialement.

  2. #2
    Expert confirmé Avatar de 7gyY9w1ZY6ySRgPeaefZ
    Homme Profil pro
    dba
    Inscrit en
    juillet 2007
    Messages
    4 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : juillet 2007
    Messages : 4 650
    Points : 5 291
    Points
    5 291

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ; WITH SR1 AS (
    	SELECT Id, col1, col2, col_A + col_B + col_C + col_D as Total 
    	FROM dbo.MaTable 
    ) , SR2 AS ( 
    	SELECT Id, col1, col2, Total , ROW_NUMBER() OVER(ORDER BY Total DESC ) AS RowID_TotalOrderDesc
    	FROM SR1
    ) 
    SELECT Id, col1, col2, Total , RowID_TotalOrderDesc
    from SR2
    where RowID_TotalOrderDesc >=10
    Quelque chose dans ce goût-là.
    Doit y avoir plus simple mais ça fait la job.

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    3 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 : 3 614
    Points : 6 078
    Points
    6 078
    Billets dans le blog
    1

    Par défaut

    Euh...

    Pourquoi pas un simple TOP 10 avec un order by ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT top 10 Id, col1, col2, col_A + col_B + col_C + col_D as Total 
    FROM dbo.MaTable
    order by total desc
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Expert confirmé Avatar de 7gyY9w1ZY6ySRgPeaefZ
    Homme Profil pro
    dba
    Inscrit en
    juillet 2007
    Messages
    4 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : juillet 2007
    Messages : 4 650
    Points : 5 291
    Points
    5 291

    Par défaut

    Citation Envoyé par StringBuilder Voir le message
    Pourquoi pas un simple TOP 10 avec un order by ?
    Y me semblait bien aussi qu'il y avait plus simple...
    C'était la fin de journée, tout ça, je suis comme parti tête baissé dans l'usine à gaz on dirait

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien Methode
    Inscrit en
    juillet 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Methode

    Informations forums :
    Inscription : juillet 2018
    Messages : 19
    Points : 12
    Points
    12

    Par défaut

    Merci pour votre aide

  6. #6
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 912
    Points : 9 076
    Points
    9 076

    Par défaut

    J'ajoute mon petit grain de sel, car "il me semble" qu'en cas d'ex-aequo les deux solutions ne donnent pas le même résultat.
    Si les 5 premières lignes renvoient la même valeur, faut-il renvoyer 10 lignes, ou 14 ?

    Tatayo.

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    3 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 : 3 614
    Points : 6 078
    Points
    6 078
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par tatayo Voir le message
    J'ajoute mon petit grain de sel, car "il me semble" qu'en cas d'ex-aequo les deux solutions ne donnent pas le même résultat.
    Si les 5 premières lignes renvoient la même valeur, faut-il renvoyer 10 lignes, ou 14 ?

    Tatayo.
    Hmmmm ROW_NUMBER() donne des nombres différents en cas d'ex aequo dans la clause ORDER BY du moment qu'on n'a pas de partitionnement, non ? (contrairement à RANK() et DENSE_RANK())
    C'est d'ailleurs pour cette raison que ROW_NUMBER() n'est pas déterministe et que deux exécutions successives de la même requête peuvent donner des résultats différents.
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    3 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 3 912
    Points : 9 076
    Points
    9 076

    Par défaut

    Effectivement, je viens de demander à RTFM, et il n'y a pas de doublons dans la numérotation avec ROW_NUMBER.

    Mais je maintiens quand même ma question (moi têtu ? non, si peu ) Bgrinch veut "les lignes qui ont les 10 plus grandes valeurs", et non les 10 premières lignes. Donc en cas d'ex-aequo, pour moi il faut renvoyer plus de 10 lignes, et donc utiliser la méthode de 7gyY9w1ZY6ySRgPeaefZ mais avec un DENSE_RANK.

    Tatayo.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    septembre 2016
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2016
    Messages : 576
    Points : 1 069
    Points
    1 069

    Par défaut

    Bonsoir,
    Il me semble que TOP 10 WITH TIES renverra 14 lignes ...
    Le savoir est une nourriture qui exige des efforts.

  10. #10
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    19 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 19 005
    Points : 44 664
    Points
    44 664

    Par défaut

    Citation Envoyé par StringBuilder Voir le message
    Hmmmm ROW_NUMBER() donne des nombres différents en cas d'ex aequo
    Non ! ROW_NUMBER est toujours continu et monotone contrairement à RANK : DENSE_RANK

    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  11. #11
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    3 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    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 : 3 614
    Points : 6 078
    Points
    6 078
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par SQLpro Voir le message
    Non ! ROW_NUMBER est toujours continu et monotone contrairement à RANK : DENSE_RANK

    A +
    Ben c'est exactement ce que j'ai dit...
    On ne jouit bien que de ce qu’on partage.

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

Discussions similaires

  1. Ne récupérer que les plus grandes dates
    Par david71 dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 28/07/2010, 18h13
  2. Réponses: 2
    Dernier message: 18/03/2009, 07h48
  3. Réponses: 3
    Dernier message: 28/04/2008, 14h57
  4. garder que les doublons ?
    Par deby23 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/02/2008, 13h41
  5. Garder que les 10 premiers caractère d'une variable
    Par dembroski dans le forum Fonctions
    Réponses: 2
    Dernier message: 27/06/2007, 16h18

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