Maison  >  Article  >  base de données  >  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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 05:56:02662parcourir

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 :

<code class="sql">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;</code>

Cette requête doit calculer efficacement la somme de conversions.value pour chaque conversions.id distincte dans chaque groupe links.id, en veillant à ce que chaque ligne ne soit comptée qu'une seule fois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn