PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 23/04/2010 12:05:30

jemini
Membre

Addition de colonnes sur plusieurs enregistrements

Bonjour,

Voilà mon problème.
J'ai une table comportant les infos de fichiers avec les champs suivants :

- id (identifiant unique)
- name (nom du fichier)
- size (taille du fichier en octets)
- date (date de création du fichier)

Je souhaite récupérer les x premiers fichiers, classer par date, dont le poids total (comprendre la somme des colonnes "size" des x fichiers) est inférieure ou égale à une valeur définie (appelée TAILLE_MAX).

Comment réaliser une telle requête ?

Merci par avance pour votre aide.

J.

Hors ligne

#2 23/04/2010 13:55:48

daamien
damien clochard

Re : Addition de colonnes sur plusieurs enregistrements

Je vois pas ce que tu appeles « la somme des colonnes "size" ».
De ce que je comprends de ton énoncé, ça donne

SELECT *
FROM fichiers f
WHERE f.size <= TAILLE_MAX
ORDER BY f.date
LIMIT x

Un exemple concret de résultat attendu serait utile smile

Hors ligne

#3 26/04/2010 11:38:57

jemini
Membre

Re : Addition de colonnes sur plusieurs enregistrements

Merci pour ta réponse.

daamien a écrit :

Un exemple concret de résultat attendu serait utile

Effectivement, voici un exemple :

J'ai les 4 enregistrements suivants :

- id:1, name:fichier1, size:100, date:01/01/10
- id:2, name:fichier2, size:100, date:02/01/10
- id:3, name:fichier3, size:100, date:03/01/10
- id:4, name:fichier4, size:100, date:04/01/10

Je veux obtenir les premiers enregistrements, classés par date dont le poids total est <= 350, j'obtiendrai donc :

- id:1, name:fichier1, size:100, date:01/01/10
- id:2, name:fichier2, size:100, date:02/01/10
- id:3, name:fichier3, size:100, date:03/01/10

Car la somme de id1.size + id2.size + id3.size <= 350

Cette requête est-elle réalisable ?

J.

Hors ligne

#4 26/04/2010 14:52:34

Marc Cousin
Membre

Re : Addition de colonnes sur plusieurs enregistrements

Bonjour, dans quelle version de PostgreSQL (si c'est en 8.4, il y a une solution assez simple).


Marc.

Hors ligne

#5 26/04/2010 15:27:01

jemini
Membre

Re : Addition de colonnes sur plusieurs enregistrements

Marc Cousin a écrit :

dans quelle version de PostgreSQL

Version 8.3

J.

Hors ligne

#6 26/04/2010 15:36:54

Marc Cousin
Membre

Re : Addition de colonnes sur plusieurs enregistrements

Dommage.

Je ne pense pas que vous puissiez faire cette requête correctement avec une version antérieure à la version 8.4 : vous voulez faire une somme glissante, et c'est justement le rôle des 'window functions', rajoutées dans cette version. Je ne pense pas qu'il y ait de solution propre pour résoudre ça avec des fonctions SQL standard.

Dernière modification par Marc Cousin (26/04/2010 15:37:09)


Marc.

Hors ligne

#7 26/04/2010 16:14:27

jemini
Membre

Re : Addition de colonnes sur plusieurs enregistrements

Merci pour ta réponse. Oui c'est exactement ce que je veux faire : une somme glissante. Je vais donc devoir faire cela au niveau applicatif...

J.

Hors ligne

#8 26/04/2010 16:15:45

Marc Cousin
Membre

Re : Addition de colonnes sur plusieurs enregistrements

Ou passer en 8.4, si c'est possible. C'est de toutes façons la version qu'il est recommandé d'utiliser maintenant.


Marc.

Hors ligne

Pied de page des forums