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 :

Détermination du rang d'une ligne


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Détermination du rang d'une ligne
    bonjour
    j'ai une liste de comptes dont je doit retourner l'index du numéro de compte dans l'ordre des comptes et en les regroupant. ma question n'est pas clair, donc voici un exemple :

    exemple
    cpte

    8000
    1500
    2000
    1800
    1000
    1800
    8000
    7000
    1500

    => je dois retourner (si j'ai pas fais d'erreur)
    cpte index
    8000 6
    1500 2
    2000 4
    1800 3
    1000 1
    1800 3
    8000 6
    7000 5
    1500 2

    j'ai fais quelques tentatives d'approche :
    SELECT count(cpte),cpte FROM table GROUP BY cpte ORDER BY cpte;
    count cpte
    1 1000 => il faudrait alors que je retourne la position ou le rang 1
    2 1500 => il faudrait alors que je retourne la position ou le rang 2
    2 1800 => il faudrait alors que je retourne la position ou le rang 3
    1 2000 => il faudrait alors que je retourne la position ou le rang 4
    1 7000 => il faudrait alors que je retourne la position ou le rang 5
    2 8000 => il faudrait alors que je retourne la position ou le rang 6

    je sais pas si il existe une fonction rank ou un truc comme ca

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 58
    Points : 61
    Points
    61
    Par défaut
    Salut,

    Fait le order by sur count(cpte) au lieu de cpte si tu veux un ordre en fonction de tes résultats.

    @+

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    je crois que je vais m'inspirer de cette requete la :
    http://www.1keydata.com/sql/sql-rank.html

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    voila une tentative, je suis pas encore sur que c'est bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c1.cpt, COUNT(c2.cpt) as rank 
    FROM table c1, (SELECT DISTINCT cpt FROM table) AS c2
    WHERE c1.cpt >= c2.cpt 
    GROUP BY c1.clef, c1.cpt 
    ORDER BY c1.clef ASC;
    par contre j'ai du mettre un champs clef en plus, sur ma table initial

  5. #5
    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 !

    Tu es sous quel SGBD ?
    Si tu as accès au fonction de fenêtrage (SQL Server par exemple), tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT c1.count(*), c1.cpte, row_number() over(order by count(*))
    FROM TABLE c1
    GROUP BY c1.cpte

    (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/

  6. #6
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    j'utilise postgresql, je crois pas qu'ils ont pour l'instant cette fonction, j'ai vu que la fonction rank existait aussi sur certains sgbd

  7. #7
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    à priori rank c'est du SQL:2003...je bosse également sous postgres, je pense que cette norme n'est pas encore intégrée...
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  8. #8
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    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
    SELECT tab.cpte,tab.count, (CASE WHEN tab.num = 0 then 1 ELSE count(*) + 1  END)AS Rang 
    FROM
    (SELECT  c1.cpte,foo.cpte as greater, count(c1.cpte), (CASE WHEN foo.cpte Is Null  then 0 ELSE  1  END)AS num
    FROM tmp c1
    LEFT OUTER JOIN
    (
    	SELECT   cpte, count(cpte)
    	FROM tmp c2
    	GROUP BY cpte
    	ORDER BY cpte ASC
    ) as foo ON c1.cpte > foo.cpte 
    GROUP BY c1.cpte ,foo.cpte
     
    ORDER BY c1.cpte ASC
    ) as tab
    GROUP BY tab.cpte,tab.count,tab.num
    ORDER BY 1
    mais ça marche...

    a quand les fonctions de fenêtrage sous pgsql...
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

Discussions similaires

  1. [XL-2003] Range d'une ligne complète avec indice de ligne dynamique
    Par panda31 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/10/2011, 09h23
  2. range sur une ligne
    Par miopie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/09/2010, 13h15
  3. Rang d'une ligne avec un index
    Par coyotte507 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/07/2010, 00h38
  4. [DisplayTag] Recuperer une ligne bien déterminée d'une table
    Par sel3aa dans le forum Taglibs
    Réponses: 3
    Dernier message: 12/05/2009, 18h28
  5. [VBA Excel] Ajouter, supprimer une ligne ou collone range
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2005, 15h53

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