MYSQL : Utilisation de sum() pour les lignes uniques
Dans les requêtes SQL, la fonction sum() est généralement utilisée pour calculer la somme de valeurs sur plusieurs lignes. Cependant, lorsque vous travaillez avec des données groupées, il est essentiel de considérer les lignes en double. Dans cette question spécifique, l'utilisateur vise à calculer la somme d'une colonne conversions.value pour chaque ligne distincte de la table des conversions.
La requête fournie rencontre initialement un problème où sum(conversions.value) compte incorrectement le valeur pour chaque ligne plusieurs fois en raison de la clause GROUP BY. Pour résoudre ce problème, l'utilisateur doit s'assurer que la somme est calculée uniquement pour des lignes uniques.
La solution réside dans l'utilisation du concept de produit cartésien, qui combine des éléments de plusieurs ensembles. Dans ce cas, les ensembles sont les événements de clic et de conversion uniques. La fonction count(DISTINCT conversions.id) supprime efficacement les lignes de conversion en double, fournissant ainsi le nombre d'événements de conversion uniques.
Pour calculer la somme correcte, l'utilisateur peut multiplier sum(conversions.value) par le nombre d'événements de conversion distincts. conversions et divisez-le par le nombre total de lignes (count(*)). Cette opération garantit que la somme est calculée uniquement pour les événements de conversion uniques associés à chaque lien.
La requête modifiée recommandée dans la solution est :
<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>
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!