Maison > base de données > tutoriel mysql > le corps du texte

Comment calculer la somme d'une colonne pour des lignes uniques dans une requête SQL groupée ?

Barbara Streisand
Libérer: 2024-11-03 19:07:29
original
520 Les gens l'ont consulté

How to Calculate the Sum of a Column for Unique Rows in a Grouped SQL Query?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal