Dans MySQL, vous pouvez construire la table en utilisant union all :
select m.mode, SUM(p.amount)
from (select 'Cash' as mode union all
select 'Card' union all
select 'Cheque' union all
select 'Bank'
) m left join
payments p
on m.mode = p.mode
group by m.mode;
Remarques :
- J'ai changé
nameenmodedonc la colonne avec les mêmes informations porte le même nom. - Le
group byla clé doit provenir du premier nom, pas le deuxième (c'est-à-direm.modeau lieu dep.mode). - Si vous voulez
0au lieu deNULL, puis utilisezcoalesce(sum(p.amount), 0). - Vous voudrez peut-être envisager une table de référence contenant les valeurs de mode.