Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Débuter
Débuter Forum d'entraide : Débuter en base de données avec PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/03/2011, 23h13   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Par défaut indice de ligne

* Bonjour, *

Existe-t-il une commande postgresql qui permet d'avoir pou chaque ligne d'une requête l'indice de la ligne ?

Par exemple la requête =>

Code :
1
2
SELECT dossard
FROM vue_course_veteran
renvoi le résultat =>

5
2
3
4

Les chiffres sont les dossards, ils arrivent tous dans l'ordre d'arriver de la course ( le 5 est le premier quoi).
J'aimerais avoir le numéro de la ligne correspondant à ces numéro.


donner-ligne( 5 ) => 1

En sachant que je ne veux/peux pas insérer de clé ,OID ou quoi que ce soit pour compter le nombres de lignes.

je veux juste le numéro de la ligne correspondant à un champs qui est "unique" est-ce possible ?

* Merci *
maxiplay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 08h49   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Bonjour,

Y a-t-il un champ sur lequel s'appuyer pour trier l'ordre de ces lignes (un ordre d'arrivée) ?
Ce que vous voulez, c'est le couple dossard-ordre d'arrivée ?

ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 16h53   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Citation:
Envoyé par maxiplay Voir le message
je veux juste le numéro de la ligne correspondant à un champs qui est "unique" est-ce possible ?
Oui en utilisant les fonctions de fenêtrage comme RANK(), DENSE_RANK() ou ROW_NUMBER. Lisez l'article que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/article...clause-window/
Mais il nous faut l'expression qui ordonnera ces rangs. Pr exemple si ce sont sur les temps de course :

Code :
1
2
3
SELECT *, RANK() OVER(ORDER BY COURSE_TEMP DESC) AS N
FROM   ...
ORDER BY N
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 15h19   #4
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Par défaut over ne fonctionne pas

Merci de vos réponses,

ced dit:
Citation:
Y a-t-il un champ sur lequel s'appuyer pour trier l'ordre de ces lignes (un ordre d'arrivée) ?
Ce que vous voulez, c'est le couple dossard-ordre d'arrivée ?
Oui! il y a une table "arrivee" qui est construite comme ceci =>

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE arrivee
(
  arrivee_dossard integer NOT NULL,
  arrivee_heure integer,
  arrivee_minute integer,
  arrivee_seconde integer,
  arrivee_centieme integer,
  arrivee_id serial NOT NULL,
  CONSTRAINT arrivee_pkey PRIMARY KEY (arrivee_id),
  CONSTRAINT arrivee_arrivee_dossard_fkey FOREIGN KEY (arrivee_dossard)
      REFERENCES inscription (inscription_dossard) MATCH FULL
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT arrivee_arrivee_dossard_key UNIQUE (arrivee_dossard)
)

arrivee_id est l'ordre d'arriver.Mon problème ici est que je ne souhaite pas donner le classement général du coureur mais son CLASSEMENT DANS SA CATEGORIE D'AGE !

par exemple :

NOM | PRENOM | classement | classement_de_categorie

J'aurais aimé établir un classement des vétérans au sein même du classement général.

Or sqlpro dit:

Citation:
Oui en utilisant les fonctions de fenêtrage comme RANK(), DENSE_RANK() ou ROW_NUMBER. Lisez l'article que j'ai écrit à ce sujet :
Cela tombait pile poil !

donc faire un RANK() en prenant comme critère la catégorie et le classement_general.

malheureusement ,j'ai essayé de faire une requête simple =>

Code :
1
2
3
4
 SELECT  inscription.inscription_nom, inscription.inscription_prenom,RANK()    OVER(ORDER BY arrivee.arrivee_id DESC)
 
   FROM inscription, arrivee
  WHERE arrivee.arrivee_dossard= inscription.inscription_dossard


et voila le CODE ERREUR que postgresql 8.4 me signal


Citation:
ERROR: syntax error at or near "OVER"
LINE 1: ...iption_nom, inscription.inscription_prenom,RANK() OVER(ORDER...
^

********** Erreur **********

ERROR: syntax error at or near "OVER"
État SQL :42601
Caractère : 77
OVER NE FONCTIONNE PAS

voila j'ai sans doute mal fait ma requête ou mal compris le principe du OVER j'aurais besoin de vos lumières.

Merci, bonne journée
maxiplay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 15h47   #5
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
Le message d'erreur laisse à penser que ce n'est pas postgresql 8.4, mais une version antérieure.
Il faudrait faire pour vérifier.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 10h17   #6
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Par défaut oupss

re bonjour


oui en effet c'est la version

"PostgreSQL 8.3.13, compiled by Visual C++ build 1400"

Je me renseigne si le OVER fonctionne sous cette version à moins que quelqu'un me le dise lol
maxiplay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 10h26   #7
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Par défaut pas à jour

Bon ba ma version de postgres est trop ancienne pour couvrir le "OVER" .
Le OVER est soutenue que à partir de la version 8.4.
maxiplay est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 17h28   #8
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mars 2011
Messages : 9
Points : 2
Points : 2
Par défaut maj version 9

Salut !
J'ai fait la migration de ma base vers la 9.0.3 et le OVER fonctionne parfaitement
reste plus qu'a trouver un moyen de d'avoir mon classement par catégorie je bosse et je vous tiens au courant salut!
maxiplay est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h17.


 
 
 
 
Partenaires

Hébergement Web