J'ai la table nommée Commandes CODE>: UPDATE new_table
SET new_table.total_orders = (
SELECT COUNT(DISTINCT(order_id)) FROM orders
GROUP BY user_id
ORDER BY user_id ASC)
WHERE new.user_id = (SELECT DISTINCT user_id FROM orders);
3 Réponses :
Il y a votre problème: Vous pouvez probablement utiliser la mise à jour avec une jointure pour le faire: P> où new.user_id = (sélectionnez user_id distinct à partir de commandes); code> UPDATE new_table as t0
JOIN (
SELECT user_id,
COUNT(DISTINCT order_id) As total_orders
FROM orders
GROUP BY user_id
) as t1
ON t0.user_id = t1.user_id
SET t0.total_orders = t1.total_orders
Vous pouvez simplement utiliser une agrégation dans votre commande d'origine sortie : P> Cependant, il s'agit de statique et ne se met pas à jour en tant qu'utilisateur crée plus de commandes. Il a probablement plus de sens de créer une vue code> code> (exactement la même requête, il suffit de remplacer Créer une table code> pour créer la colonne total_orders code> en même temps: Tableau code> avec la vue code>): p> CREATE VIEW new_table AS
SELECT user_id, COUNT(order_id) AS total_orders
FROM orders
GROUP BY user_id
Vous avez juste besoin d'une sous-requête corrélée: Cependant, je suppose que SO: P> order_id code> est unique dans commandes code>. En outre, vous voulez probablement définir la valeur sur 0 code> s'il n'y a pas de commandes. P> UPDATE new_table nt
SET nt.total_orders = (SELECT COUN(*)
FROM orders o
WHERE o.user_id = nt.user_id
);