"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment calculer la somme d'une valeur en SQL tout en garantissant que chaque ligne n'est comptée qu'une seule fois ?

Comment calculer la somme d'une valeur en SQL tout en garantissant que chaque ligne n'est comptée qu'une seule fois ?

Publié le 2024-11-16
Parcourir:510

How To Calculate the Sum of a Value in SQL While Ensuring Each Row is Counted Only Once?

Regroupement de lignes dans SQL à l'aide de SUM() pour des valeurs distinctes

Dans votre requête MySQL, vous souhaitez calculer la somme d'une valeur dans le tableau des conversions tout en veillant à ce que chaque ligne ne soit comptée qu'une seule fois. Pour y parvenir, vous utilisez le mot-clé DISTINCT conjointement avec la fonction SUM(). Cependant, vous rencontrez un problème où les lignes en double gonflent le résultat SUM().

Pour résoudre ce problème, tenez compte des relations de clé primaire dans vos tables. Si conversions.id est la clé primaire de la table de conversions et stats.id est la clé primaire de la table de statistiques, alors chaque conversions.id est unique à un seul links.id.

Sur la base de cette compréhension, vous pouvez restructurer votre requête pour calculer la somme de conversions.value pour chaque conversions.id distinct, puis diviser le résultat par le nombre total de lignes dans chaque groupe links.id. Cela vous fournira la somme souhaitée de valeurs distinctes.

Voici la requête révisée :

SELECT links.id,
       count(DISTINCT stats.id) as clicks,
       count(DISTINCT conversions.id) as conversions,
       sum(conversions.value)*count(DISTINCT conversions.id)/count(*) as conversion_value
FROM links
LEFT OUTER JOIN stats ON links.id = stats.parent_id
LEFT OUTER JOIN conversions ON links.id = conversions.link_id
GROUP BY links.id
ORDER BY links.created desc;

Cette requête doit calculer efficacement la somme des conversions.value pour chaque conversions.id distinct au sein de chaque groupe links.id, en garantissant que chaque ligne n'est comptée qu'une seule fois.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3