Maison >base de données >tutoriel mysql >Comment calculer la somme précise des valeurs de conversion pour des conversions distinctes dans MySQL ?

Comment calculer la somme précise des valeurs de conversion pour des conversions distinctes dans MySQL ?

DDD
DDDoriginal
2024-11-04 04:20:02225parcourir

How to Calculate Accurate Sum of Conversion Values for Distinct Conversions in MySQL?

Agrégation de lignes distinctives dans MySQL avec sum()

Les requêtes SQL impliquent souvent des fonctions d'agrégation telles que sum() pour calculer des résumés numériques. Lorsque vous traitez des données groupées, il est essentiel de compter chaque enregistrement unique une seule fois pour éviter des résultats gonflés.

Considérez la requête suivante :

<code class="sql">SELECT links.id,
       count(DISTINCT stats.id) as clicks,
       count(DISTINCT conversions.id) as conversions,
       sum(conversions.value) 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>

L'objectif est de compter le nombre de clics distincts. , conversions et additionnez les valeurs de conversion correspondantes pour chaque lien. Cependant, l'agrégation sum(conversions.value) compte chaque valeur de conversion plusieurs fois en raison du regroupement.

Pour calculer avec précision la somme de chaque conversion unique, nous devons ajuster l'expression. En supposant que conversions.id est la clé primaire du tableau des conversions, nous pouvons exploiter la relation entre le nombre de conversions distinctes et le nombre total d'enregistrements.

Pour chaque conversions.id, il y a au plus un lien .id affecté. Par conséquent, la somme de toutes les valeurs de conversion pour une conversion distincte peut être calculée en multipliant la somme réelle (conversions.value) par le nombre de conversions distinctes et en la divisant par le nombre total d'enregistrements dans le groupe :

<code class="sql">sum(conversions.value) * count(DISTINCT conversions.id) / count(*)</code>

L'intégration de cet ajustement dans la requête entraîne :

<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 modifiée additionne efficacement les valeurs de conversion pour chaque conversion unique, fournissant ainsi des résultats globaux précis pour les données groupées.

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