SQL: une somme toute bête

SQL: une somme toute bête - SQL/NoSQL - Programmation

Marsh Posté le 02-01-2011 à 12:48:52    

Bonjour,

 

J'ai une table village avec comme champ nom et argent.

 

J'aimerai faire une requete me renvoyant la somme d'argent détenu par les villages ayant pour nom A et B.
Je ne sais pas comment m'y prendre. Pourtant c'est surement assez simple mais je ne sais pas différencier mes deux villages dans la somme.

 

Attention, j'ai une contrainte, je ne veux pas utiliser SUM. Je voudrais quelque chose du type:
SELECT A.argent+B.argent FROM village WHERE nom=A or nom=B. Je sais que cette requète est fausse mais vous voyez sans doute l'idée.

 

Merci d'avance,
SmilM


Message édité par smilm le 02-01-2011 à 12:52:15
Reply

Marsh Posté le 02-01-2011 à 12:48:52   

Reply

Marsh Posté le 02-01-2011 à 13:06:07    

sans utiliser sum , ça complique vraiment la requete  
Ca me semble possible avec une jointure, mais beurk  
 
select v1.argent + v2.argent  
FROM village v1 , village v2  
WHERE v1.nom=A AND v2.nom = B

Reply

Marsh Posté le 02-01-2011 à 14:04:02    

Merci!

 

Bon je pense avoir compris le principe. Voici ma requète:

 

SELECT (SUM((F1.MDT+F1.MST)*F1.débit)) + ((F2.MDT+F2.MST)*F2.débit) As Total
FROM Flux as F1, Gems as G1, Flux as F2, Gems as G2
WHERE F1.Bassin = G1.Bassin AND G1.ocean IN('NAT','SAT')
AND F2.Bassin = G2.Bassin AND F2.bassin='Amazonas'

 

Access me renvoi : Vous avez essayer d'executer une requète ne comprenant pas l'expression spécifié "(SUM((F1.MDT+F1.MST)*F1.débit)) + ((F2.MDT+F2.MST)*F2.débit" comme une partie de la fonction d'agrégat.

 

Je ne comprends pas ce message d'erreur. Je cherche partout sur le net mais je ne trouve rien de satisfaisant. Ce qui est sur c'est que si j'enlève le SUM, la requete passe bien mais me renvoi un résultat qui ne m'intéresse pas.
En gros ça me renvoi tout les enregistrements différents qui correspondent à l'expression (F1.MDT+F1.MST)*F1.débit et un deuxième champ identique sur toutes les lignes correspondant a la valeur de  (F2.MDT+F2.MST)*F2.débit ce qui m'intéresse assez peu.

 

Ce que je désire c'est la somme entre (SUM((F1.MDT+F1.MST)*F1.débit)) et (F2.MDT+F2.MST)*F2.débit.

 

Une idée ?


Message édité par smilm le 02-01-2011 à 14:04:36
Reply

Marsh Posté le 02-01-2011 à 14:16:58    

Ca n'a pas l'air simple [:mcwammed]  
 
Déjà, elle sert à quoi la table G2 ? J'ai l'impression que tu pourrais l'enlever, à moins que ce ne soit une erreur dans la clause WHERE.
 
Ensuite, pour simplifier, il est peut être possible d'écrire la requête sous la forme :
SELECT SUM( (MDT+MST)*débit ) Total
FROM Flux
WHERE Flux.Bassin IN ( ... )
 
En mettant dans le IN ce qui renvoie la liste des "Bassin" qui t'intéressent :)


---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 02-01-2011 à 14:25:21    

mais pourquoi ne pas faire  
 
SELECT (SUM((MDT+MST)*débit)) As Total
FROM Flux  left outer join  Gems on  Flux.Bassin = Gems.Bassin
WHERE  ocean IN('NAT','SAT')  OR  bassin='Amazonas'

Reply

Marsh Posté le 02-01-2011 à 14:25:23    

Pas vraiment simple en effet.
 
Si je procède comme tu le propose, sans préciser F1 ou F2 devant les champs que je selectionne, cela entraine une erreur: MDT, MST et débit sont ambigue: on ne sait pas s'ils proviennent de F1 ou de F2.
 
Une autre piste peut être, en utilisant des requètes imbriqués et UNION.
 
 
SELECT SUM(pts) AS total
FROM ((SELECT ((MDT+MST)*débit) as pts
FROM TblFlux as F, TblGemsInfoBassins as G
WHERE F.Bassin = G.Bassin AND F.bassin='Amazonas')
UNION ALL
(SELECT SUM((MDT+MST)*débit) as pts
FROM TblFlux as F, TblGemsInfoBassins as G
WHERE F.Bassin = G.Bassin AND ocean IN('NAT','SAT')))
 
Cela me renvoi une "erreur de l'opération JOIN".
Qu'en pensez vous ?

Reply

Marsh Posté le 02-01-2011 à 14:34:10    

smilm a écrit :

Pas vraiment simple en effet.
 
Si je procède comme tu le propose, sans préciser F1 ou F2 devant les champs que je selectionne, cela entraine une erreur: MDT, MST et débit sont ambigue: on ne sait pas s'ils proviennent de F1 ou de F2.

Je n'ai qu'une table Flux dans ma requête [:proy]  
 

smilm a écrit :


Une autre piste peut être, en utilisant des requètes imbriqués et UNION.
 
SELECT SUM(pts) AS total
FROM ((SELECT ((MDT+MST)*débit) as pts
FROM TblFlux as F, TblGemsInfoBassins as G
WHERE F.Bassin = G.Bassin AND F.bassin='Amazonas')
UNION ALL
(SELECT SUM((MDT+MST)*débit) as pts
FROM TblFlux as F, TblGemsInfoBassins as G
WHERE F.Bassin = G.Bassin AND ocean IN('NAT','SAT')))
 
Cela me renvoi une "erreur de l'opération JOIN".
Qu'en pensez vous ?

J'en pense qu'il y a trop de FROM :D  


---------------
Doucement le matin, pas trop vite le soir.
Reply

Sujets relatifs:

Leave a Replay

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