Je souhaite afficher tous les clients et leurs adresses, ainsi que le nombre et la somme totale de leurs commandes. Ma requête ressemble à ceci:Les fonctions agrégées renvoient des valeurs erronées lors de la jonction de plusieurs tables
select *, sum(o.tota), count(o.total)
from customer c
natural join orders o
group by c.custId;
qui fonctionne bien.
mais si j'ajoute une nouvelle table à la requête:
select *, sum(o.tota), count(o.total)
from customer c
natural join orders o
natural join cust_addresses a
group by c.custId;
alors il ne fonctionnera plus. les fonctions agrégées renvoient des valeurs erronées car il peut y avoir plusieurs adresses par client, ce qui est correct, je veux également afficher toutes leurs adresses. Que puis-je faire pour résoudre le problème de la fonction d'agrégation?
je pourrais penser à faire quelque chose comme:
select *, (select total from orders o where o.custid=c.custid), ..
from customer c
natural join orders o
natural join cust_addresses a
group by c.custId;
Mais cela est très lent.
EDIT je maintenant essayé ce qui suit, mais il me dit que c.custid sur le terrain est inconnu:
select *
from
customer c,
left join (select sum(o.tota), count(o.total) from orders o where o.custid=c.custid) as o
where ...
group by c.custId;
Comment voulez-vous gérer les clients qui n'ont pas de commandes? Votre requête actuelle les omet –
année à droite, j'ai oublié la gauche pour la gauche rejoindre :) – codymanix