Vue - Retour 0 si aucune ligne trouvée dans un groupés par requête
Disons que j'ai la suite de MySQL vue:
create or replace view total_transactions(account_id, total) as
select
t.account_id,
ifnull(sum(t.value), 0) as total
from transactions t
where t.paid IS TRUE
group by t.bank_account_id;
Disons que le compte n'a pas toute transaction pourtant, je veux la vue renvoie 0.
Maintenant, si je fais un select comme:
select * from total_transactions where account_id = 2060;
Et compte 2060 n'a pas eu de toute transaction, il sera de retour moi rien, au lieu de 0.
Comment pourrais-je résoudre ce problème?
Merci d'avance.
MODIFIER
Je pense que ça pourrait être quelque chose avec le group by
...
Si j'exécute la requête que j'utilise pour le point de vue, sans le groupe, il fonctionne (retour à 0 même en l'absence de résultats), mais si j'utilise group by
il s'agit null:
select
t.account_id,
ifnull(sum(t.value), 0) as total
from transactions t
where t.paid IS TRUE
and account_id = 2060;
Retourne 0
, et
create or replace view total_transactions(account_id, total) as
select
t.account_id,
ifnull(sum(t.value), 0) as total
from transactions t
where t.paid IS TRUE
and account_id = 2060
group by t.bank_account_id;
Retourner un ensemble vide.
OriginalL'auteur caarlos0 | 2013-03-24
Vous devez vous connecter pour publier un commentaire.
Si il n'y a pas une entrée dans la vue des résultats, alors ce sera toujours le retour
NULL
- SQL. Si vous modifiez votreSELECT
que vous avez contre l'utilisation de la vue, vous pouvez réaliser ce que vous voulez:Edit:
Empty set (0,01 sec)
Voir mon edit. Cela devrait fonctionner lorsque vous obtenez des résultats et quand vous ne le faites pas. Mais ce n'est pas la plus élégante.
Thaaaaanks, le modifier fonctionne comme un charme!
OriginalL'auteur Aiias
Dans la production, ne pas utiliser de
SELECT *
. Voir cette SORTE de question pour une bonne réponse quant à pourquoi.Donc, en supposant que vous ne l'êtes pas, vous pouvez utiliser
FUSIONNER
, qui renvoie la première valeur non nulle.select COALESCE(total, 0) as val from total_transactions where account_id = 2060; Empty set (0,01 sec)
Est
total
un nom de champ dans latotal_transactions
table ou est-il un alias pour un résultat calculé?Cela ne fonctionnera pas car il n'y a pas de lignes, donc il n'y a rien à se fusionner.
OriginalL'auteur Luke Shaheen
Pour les valeurs positives je utiliser
ou pour toute
OriginalL'auteur Ivan Ivanov