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 ?
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!