Maison >base de données >tutoriel mysql >Comment calculer SUM() pour des lignes distinctes dans MySQL ?

Comment calculer SUM() pour des lignes distinctes dans MySQL ?

DDD
DDDoriginal
2024-11-04 15:32:02425parcourir

How to Calculate SUM() for Distinct Rows in MySQL?

SUM() pour les lignes distinctes dans MySQL

Lors de l'utilisation de la fonction d'agrégation SUM() dans une requête MySQL, il est crucial de considérer comment des lignes distinctes sont comptées pour garantir des calculs précis. Dans l'exemple fourni, l'objectif est de compter les conversions distinctes et d'additionner leurs valeurs.

Dans la requête d'origine, la fonction SUM(conversions.value) compte la valeur de chaque ligne plusieurs fois en raison du GROUP BY sur liens.id. Pour résoudre ce problème, nous devons additionner conversions.value uniquement pour des conversions.id distincts.

Une analyse méticuleuse révèle que conversions.id et stats.id sont des clés primaires. Par conséquent, nous pouvons supposer que pour chaque conversions.id, il existe un links.id unique.

Pour obtenir le résultat souhaité, nous pouvons exploiter le produit cartésien de deux ensembles représentant les clics et les conversions. Le nombre de conversions uniques peut être dérivé à l'aide de count(distinct conversions.id).

La somme des valeurs de conversion peut être corrigée en la multipliant par le nombre de conversions uniques divisé par le nombre total : sum(conversions. value)count(distinct conversions.id)/count()

L'intégration de cette modification produit la requête révisée suivante :

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 affinée élimine efficacement les lignes en double dans le calcul de conversion_value, garantissant une somme précise pour des conversions distinctes.

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