Forum Clubic

Utiliser rand() pour l'ensemble des enregistrements

Bonjour,
je possède une table tout simple avec des chiffres, dans 1 seul champ.

TABLE
champ1
52
62
32
45
81
95
62

je souhaite faire une requète SQL, en me sortant l’ensemble de ces chiffres, mais multipliés par une valeur au hasard

SELECT champ1 * rand() FROM table

Mon seul souci en faisant cette requete, c’est que chaque chiffre va être multiplié par une valeur différente comprise entre 0 et 1. Or, mon souhait, c’est de déterminer une unique valeur comprise entre 0 et 1 et de multiplier mes chiffre par cette valeur.

Ainsi, si le rand() me retourne par exemple 0.89756189, je souhaite que l’ensemble des chiffres soit multipliés par cette valeur.

Quelqu’un a une idée ?

Salut,

En pur SQL je ne vois qu’une solution bancale :
Une petite requête imbriquée qui serait un SELECT de rand(). Un CROSS JOIN avec table donnerait ce que tu cherches non?

Si ta requête est générée par un script, il suffit de faire faire le rand() par le script.

Merci pour l’info, je vais donc passer par un script php.

Tu peux soit faire comme -kiki- dit:

Select ManagerID, cte.Rnd, ManagerID * cte.Rnd 
From EmployeeDemo, (Select rand() as Rnd) cte

Ou alors tu peux aussi utiliser un variable:

Declare @Rnd float

Select @Rnd = Rand()
Select ManagerID, @Rnd, ManagerID * @Rnd From EmployeeDemo

Théoriquement la version avec la variable est la plus propre mais dans ce cas si c’est probablement se compliquer la vie pour pas grand chose.

Tu peux aussi utiliser un common table expression (ce qui revient exactement au meme que la premiere solution mais en plus compliqué):

With cte(Rnd) as (Select rand())
Select ManagerID, cte.Rnd, ManagerID * cte.Rnd From EmployeeDemo, cte

Merci Oliiii. Je viens de tester, ça marche nickel. Je vais pouvoir modifier mes tables à la volées sans PHP :super: