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 21/05/2010 19:10:36

Slayne
Membre

Equivalent Postgre de cette requette

Bonjour,

Je teste actuellement mysql et postgresql sur des "fausses données" que j'ai généré (juste pour comparer le fonctionnement des 2 systèmes), et il y a une requete que j'ai écris pour MySQL que j'ai de la peine à transformer pour MySQL.
Il est possible que je n'ai pas choisi le sous forum le plus approprié, si c'est le cas je déplacerai mon message.

Sur MySQL, ma requete ressemble à ça :
----------------------------------------------
set @r = 0;
set @t = 0;

select @r := @r + 1, duration, @t := (@t + duration)/@r
  from input2Go
  where field1 = 1;
----------------------------------------------
Pour PostgreSQL, je pense que l'initialisation des variables serait comme ceci:
\set r 0;
\set t 0;
Mais je ne vois pas comment faire l'équivalent du := de "@r := @r + 1".
J'ai essayé :r := :r + 1, mais sans succès.
Y t il une possibilité d'arriver au meme resultat ?

Merci
Slayne

Dernière modification par Slayne (22/05/2010 13:05:54)

Hors ligne

#2 21/05/2010 19:30:06

gleu
Administrateur

Re : Equivalent Postgre de cette requette

Pouvez-vous donner un exemple de ce que cette requête va produire ?


Guillaume.

Hors ligne

#3 22/05/2010 12:04:19

Slayne
Membre

Re : Equivalent Postgre de cette requette

En partant de données comme celle ci:

+--------+--------+
| field1 | field2 |
+--------+--------+
|      1 |      5 |
|      2 |      5 |
|      3 |      4 |
|      1 |      8 |
|      1 |      3 |
+--------+--------+

L'idée serait d'avoir une sortie comme ça:

+----------+--------+-------------+
| count?   | field2 | sum(field2) |
+----------+--------+-------------+
|        1 |      5 |           5 |
|        2 |      8 |          13 |
|        3 |      3 |          16 |
+----------+--------+-------------+

La requete prend tous les 'field1' qui valent 1. Il incremente un compteur (count) a chaque fois qu'il trouve, la deuxieme colonne est le 'field2' correspondant, et sum(field2) est la somme des field2 trouvé jusque là.

Merci de ton aide !
Slayne

Hors ligne

#4 22/05/2010 12:54:44

gleu
Administrateur

Re : Equivalent Postgre de cette requette

Ça passera forcément par une procédure stockée avant la version 8.4. Il devrait être possible d'utiliser une requête window à partir de la 8.4. Par contre, je suis étonné que la ligne avec field2 = 4 n'apparaisse pas.


Guillaume.

Hors ligne

#5 22/05/2010 13:07:56

Slayne
Membre

Re : Equivalent Postgre de cette requette

Effectivement j'ai pas adapté la requete du 1er message à mon example. J'ai modifié la clause where:
select @r := @r + 1, duration, @t := (@t + duration)/@r
  from input2Go
  where field1 = 1;

D'ou l'explication "La requete prend tous les 'field1' qui valent 1".

Je vais regarder cette requete window, merci !

Hors ligne

#6 22/05/2010 13:29:53

gleu
Administrateur

Re : Equivalent Postgre de cette requette

Pour infos, voici ce que j'ai pour l'instant :

SELECT row_number() OVER (), field2 FROM la_table ORDER BY 1

Manque la partie du calcul qui est plus complexe.


Guillaume.

Hors ligne

#7 22/05/2010 13:38:33

gleu
Administrateur

Re : Equivalent Postgre de cette requette

Le reste doit ressembler à ceci :

sum(field2) over (order by field2 asc)

Guillaume.

Hors ligne

Pied de page des forums