[SQL] Multiplication de colonne

Multiplication de colonne [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 12-12-2005 à 13:29:42    

Voilà, je souhaite savoir s'il existe une fonction du type de SUM qui permettent de faire le produit de colonne. En gros je cherche à faire quelque chose du style :
 
SELECT kkchose,MULT(colonne)
FROM TABLE
WHERE cond1=cond2
GROUP BY  kkchose ;
 
 
Merci.

Reply

Marsh Posté le 12-12-2005 à 13:29:42   

Reply

Marsh Posté le 12-12-2005 à 13:48:55    

:heink:
 
tu veux multiplier les valeurs de toutes les lignes d'une colonne :??:
 
ça n'existe pas, et à mon avis, ce ne sera jamais supporté ! en quelques lignes t'es certain de provoquer une erreur de calcul !
 
même si un NUMBER permet (à quelques pas grand chose près) de référencer chaque atome de la Lune, si tu multiplies des valeurs un peu élevées, t'as toutes tes chances de faire un dépassement, même avec ce type...

Reply

Marsh Posté le 12-12-2005 à 14:58:25    

En fait il s'agit d'un calcul d'indicateur qui porte sur un ou deux facteurs (actuellement) et peut-être plus plus tard.  J'ai pour consigne de faire mes calculs avec une requête et de ne pas passer par php (ou en tout cas le moins possible).
Mon problème c'est de pouvoir multiplier 1, 2 ou 3 colonnes en utilisant une requête, tout en sachant que le nombre de facteur n'est pas prévisible
 
donc ça me donne un truc du genre  
 
SELECT col1 ...
SELECT col1*col2 ...
SELECT col1*col2*col3 ...
 
Bref, voilà le tableau.  
 
Bon ben il ne me reste plus qu'à passer par PHP, j'aurais tout essayé

Reply

Marsh Posté le 12-12-2005 à 15:27:30    

euh...
 
tu peux poster la structure de ton bordel ? parceque là, c'est vraiment pas clair...
 
j'ai l'impression que tu veux générer dynamiquement une requête, et ça c'est pas possible

Reply

Marsh Posté le 12-12-2005 à 15:27:48    

(enfin, si, tout est possible, mais c'est pas vraiment recommandé)

Reply

Marsh Posté le 13-12-2005 à 11:43:23    

En gros voilà ce que j'aimerai obtenir :
 
SELECT nom_indicateur, date_jour, (SUM(points)/SUM(points_obj))*100
FROM total_point
GROUP BY nom_indicateur, date_jour ;
 
 
Avec
 
CREATE VIEW total_point AS
SELECT nom_indicateur, date_jour, MULT(points) AS points, MULT(points_obj) AS points_obj
FROM facteur_indicateur LEFT JOIN indicateur USING (code_indicateur)
GROUP BY nom_indicateur, date_jour ;
 
Sachant qu'il y a au maximum 3, 4 facteur_indicateur avec le même code_indicateur, mais que ce nombre n'est pas constant
(donc je ne peux pas faire d'auto-jointure).
 
Sinon, non, moi non plus je ne tiens pas à faire une requète à la volée.

Reply

Marsh Posté le 13-12-2005 à 12:38:09    

là à vue de nez, je ne vois pas de solution à ton problème. a mon avis, c'est mort !

Reply

Marsh Posté le 13-12-2005 à 13:35:19    

Arrfff,  :sweat:  merci en tout cas ...

Reply

Marsh Posté le 14-12-2005 à 17:31:24    

Je ne comprends pas ce que tu veux dire par "pas prévisible".  
Si cela veut dire que dans certain cas les colonnes sont nulles, alors tu devrais t'en sortir avec des DECODE et des NVL ..... mais parle t on bien d'Oracle ici ?? .. :p

Reply

Marsh Posté le 15-12-2005 à 09:16:00    

je suis sur mysql et pas prévisible ça veut dire que certains indicateurs ont actuellement un ou deux facteurs. Mais plus tard, il est possible que certains indicateurs aient trois ou quatre facteurs.
 
Pour faire plus clair, pour l'instant mon MULT est le produit de une ou deux lignes, alors que plus tard, ça pourra être le produit de une, deux, trois ou quatre lignes ...


---------------
¤¤ Diamonds are the girls' best friends ¤¤
Reply

Marsh Posté le 15-12-2005 à 09:16:00   

Reply

Marsh Posté le 15-12-2005 à 09:45:15    

nope.
 
je pense que son problème c'est :
 
select truc, machin from bidule where machin
 
=> Ca retourne :
truc  machin
----------------
2        1
3        1
4        2
2        2
5        2
 
 
Lui, il veut :
select mul(truc), machin from bidule
 
mul(truc)  machin
--------------------
6             1
40            2


Message édité par Arjuna le 15-12-2005 à 09:45:32
Reply

Marsh Posté le 15-12-2005 à 09:50:59    

ah ok, j'avais mal compris ...Ben, jamais entendu parler d'un truc pareil, a mon avis c'est mauvais signe.... Tu ne pourrais pas decrire plus precisement ton probleme pour voir s'il n'y pas un probleme de conception ?

Reply

Marsh Posté le 15-12-2005 à 10:02:19    

ça peut pas être pire que lorsque je faisais des calculs géométriques dans mes requêtes :D
 
genre, t'as un damier représenté par la clé x,y, et tu veux rammener toutes les "cases" où il y a un certain flag dans un cercle de x cases autour de la case n,m :D
 
c'était assez marrant et certainement pas très courant ;)

Reply

Marsh Posté le 15-12-2005 à 10:07:26    

Si ca c'est deja plus courant :
select
min(x) over(partition by abscisse order by abscisse  range between 2 preceding and 2 following) min_abscisse_2,
max(x) over(partition by abscisse order by abscisse  range between 2 preceding and 2 following) max_abscisse_2,......
idem avec les ordonnées....

Reply

Marsh Posté le 15-12-2005 à 10:55:13    

ça c'est pour un carré :o
(pis tant qu'à faire, auant faire deux between, ça passe même sous mysql ;))

Reply

Marsh Posté le 15-12-2005 à 12:11:34    

ca ressemble a la conception d'un jeu ton truc ... :p

Reply

Marsh Posté le 15-12-2005 à 12:13:27    

c'était le cas ;)
 
un civilization 2 multiplanétaire en HTML avec une base de données derrière pour gérer la charge massive-multiplayer.
 
sauf que j'ai même pas eu le courage de pontre 2 lignes de code, me suis arrêté à la conception de la base et des principales PS

Reply

Marsh Posté le 15-12-2005 à 14:28:31    

dommage... trop de travail ?

Reply

Marsh Posté le 15-12-2005 à 14:31:22    

trop de travail, trop d'idées, personne pour m'épauler (genre demandé à plusieurs reprises un petit coup de main pour faire une ébauche de graphisme, pas eu de réponse, ça m'a lourdé)

Reply

Marsh Posté le 15-12-2005 à 14:37:31    

Faut pas oublier que l'enthousiasme est communicatif, j'ai eu les memes problemes au debut et ensuite je me suis fait un petit carnet d'amis passionnés (en passant par des technos parfois les plus surprenantes,  y'a meme eu DIV...)

Reply

Marsh Posté le 15-12-2005 à 14:45:41    

ben tu m'intéresses bien toi tu sais :)
 
surtout que des idées, c'est pas ça qui me manque, j'ai tout le temps envie de me lancer dans des projets de fou furieux :D

Reply

Marsh Posté le 15-12-2005 à 14:49:25    

Le plus dur, c'est de trouver des gens deja passionés, sinon la plupart te lache en cours de route et c'est très démotivant, quelques fois il faut chercher des gens passionnés dans des domaines completement differents du jeu... J'ai longtemps travaillé avec un pretre qui faisait du 3DSMAX pour un site sur sa paroisse (ensemble on a fait un clone de Sensible Soccer....).

Reply

Marsh Posté le 15-12-2005 à 14:55:37    

bon, va falloir que j'aille me faire batiser un jour si je comprends bien :D

Reply

Marsh Posté le 15-12-2005 à 14:57:34    

Es tu pret a en passer par la ? ... Si oui, alors tu es pret pour developper un jeu  !! :p

Reply

Marsh Posté le 15-12-2005 à 15:02:30    

Ben disons que c'est pas forcément le fait de développer un jeu qui m'intéresse.
 
C'est surtout résoudre un problème, abattre un travail qui semble insurmontable, et avoir àun moment l'occasion de dire "c'est moi qui ai fait ce petit bout de l'application qui sert à rien là, tu vois ?"


Message édité par Arjuna le 15-12-2005 à 15:02:56
Reply

Marsh Posté le 15-12-2005 à 15:56:20    

Ca me rappelle le jour ou j'ai remplacé dans un morceau de code :
If x=0 Then
x=1
else if x=1
x=0
end if
 
par x=1-x ....
j'avais traumatisé le gars qui codait avec moi :)

Reply

Marsh Posté le 15-12-2005 à 15:59:49    

c'est mal de faire peur aux gens comme ça :D

Reply

Marsh Posté le 15-02-2006 à 19:03:22    

couleur cafe a écrit :

Voilà, je souhaite savoir s'il existe une fonction du type de SUM qui permettent de faire le produit de colonne. En gros je cherche à faire quelque chose du style :
 
SELECT kkchose,MULT(colonne)
FROM TABLE
WHERE cond1=cond2
GROUP BY  kkchose ;
 
 
Merci.


 
Salut,
 
étant donné que le produit a1*a2*...*an est égal à exp(log a1 + log a2 +...+ log an)
 
le produit d'une colonne toto peut se faire comme ceci:
 
SELECT exp(SUM(log(toto)))
FROM matable;


Message édité par basile238 le 16-02-2006 à 00:15:14
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed