SQL: une somme toute bête - SQL/NoSQL - Programmation
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
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 ?
Marsh Posté le 02-01-2011 à 14:16:58
Ca n'a pas l'air simple
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
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'
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 ?
Marsh Posté le 02-01-2011 à 14:34:10
smilm a écrit : Pas vraiment simple en effet. |
Je n'ai qu'une table Flux dans ma requête
smilm a écrit : |
J'en pense qu'il y a trop de FROM
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