Vous n'êtes pas identifié(e).
Pages : 1
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
Pouvez-vous donner un exemple de ce que cette requête va produire ?
Guillaume.
Hors ligne
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
Ç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
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
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
Le reste doit ressembler à ceci :
sum(field2) over (order by field2 asc)
Guillaume.
Hors ligne
Pages : 1