0
votes

Comment compter le nombre de fois que chaque valeur d'un attribut d'une table apparaît dans une autre table? Et s'il n'y a pas d'apparence retourner zéro

Si j'ai une table client avec l'attribut client_id code> et une table de commande Avec les attributs ordre_id code> et client_id code>.

Comment puis-je trouver le nombre total de commandes soumises par chaque client et si un client n'en a aucun, retourner zéro. p>

J'ai essayé ce qui suit: p>

SELECT c.customer_id, COUNT(*)
FROM Customer c, Orders o
WHERE c.customer_id= o.customer_id
GROUP BY c.customer_id;

sql

1 commentaires

(UNTESTÉ): Vous pouvez utiliser une jointure gauche à des clients et que vous devez répertorier tous les clients, vous pouvez afficher 0 chaque fois que le comptage de la table des commandes est NULL.


4 Réponses :


-1
votes

Essayez le ifnull Fonction: https://www.w3schools.com/sql/sql_isnull.asp J'espère que ça va aider!


0 commentaires

1
votes

Vous pouvez utiliser rejoindre et dans le compteur () Placez le o.customer_id xxx

Démo avec des données d'échantillonnage. Ici, le client ID 2 et 4 n'a pas de données dans la table des commandes et cela résulte de zéro dans la sortie de la sortie. xxx

sortie: xxx < / pré>


0 commentaires

1
votes

Utilisez une jointure extérieure et comptez les lignes dans la table "extérieure": xxx


0 commentaires

0
votes

Agrégez d'abord les commandes par ID client et calculez le nombre total de comptes dans une sélection interne. Assurez-vous de rejoindre cette table à votre cliente afin que vous ne perdiez aucun des clients qui n'ont pas passé de commande. Enfin, utilisez une déclaration de cas pour déterminer si la valeur de retour du nombre de commandes pour un client est NULL signifie qu'ils n'ont pas fait de commandes et dans ce cas, définissez la valeur à zéro.

SELECT 
     c.customer_id, 
     CASE 
          WHEN o.num_orders IS NULL THEN 0
          ELSE o.num_orders
     END
FROM Customer c
LEFT JOIN (
     SELECT customer_id, COUNT(*) AS num_orders 
     FROM Orders 
     GROUP BY customer_id
) AS o ON c.customer_id= o.customer_id;


0 commentaires