Requête group by [MySQL4] - SQL/NoSQL - Programmation
Marsh Posté le 14-12-2004 à 15:21:44
Pour faire simple, si on enlève les restrictions que tu as ajoutées, on a :
Code :
|
La fonction COALESCE fait quoi exactement ? la mise à 0 si NULL ?
Je comprends pas vraiment pourquoi tu dis que :
"si il y a plusieur "payment" pour un "booking" alors la somme pour BOK_AMNT est forcement fausse (* par le nombre de paiements)."
Donne des exemples de données montrant le problème.
Marsh Posté le 14-12-2004 à 15:33:20
- Le coalesce permet ne ne pas sommer la valeur null si la jointure (left join) ne se fait pas. Sinon cela a pour effet de me faire une somme = a nulle.
Je me suis planter en reecrivant la requete, c'est en fait sum(coalesce(PAY_AMNT, 0))
- Mom probleme est lie a la necessite de regrouper par BND_ID
Exemple sans le group by :
BND_ID BOK_AMNT PAY_AMNT
1 20 10
1 20 20
1 30 15
Comme j'ai 2 paiments, le left join va dedoubler la ligne
La somme des BOK_AMNT est donc 2*20 au lieu de 20 donc un montant de 70 au lieu de 50
Marsh Posté le 14-12-2004 à 17:37:51
Tu peux faire qqch comme :
Code :
|
En gros, pour ne pas sommer plusieurs fois les même montants de BOOKING, tu utilises une autre jointure sur cette table (BOK2).
Pour la syntaxe y a peut-être des erreurs, ça fait qq temps que j'ai pas touché à mySql
Marsh Posté le 14-12-2004 à 15:00:21
Bonjour
J'ai un pb sur une requete group by.
Dans ma base,
1 "band" a n "booking"
1 "booking" a n "payment"
Je cherche a calculer l'encours pour chaque groupe (band). Le problème, c'est que si il y a plusieur "payment" pour un "booking" alors la somme pour BOK_AMNT est forcement fausse (* par le nombre de paiements).
Je ne vois pas comment contourner le pb. Voici la requete :
select BND_ID, (sum(BOK_AMNT) - coalesce(sum(PAY_AMNT), 0)) as BALANCE
from BOOKING
inner join BAND on BOK_BND_ID = BND_ID
left join PAYMENT on BOK_PCL_ID = PAY_PCL_ID
where BOK_TYPE = 1
and BOK_DATE < '2004-13-12'
group by BND_ID
having BALANCE > 0
Merci de votre aide