Agrupación de filas en SQL usando SUM() para valores distintos
En su consulta MySQL, desea calcular la suma de un valor en la tabla de conversiones y al mismo tiempo garantizar que cada fila se cuente solo una vez. Para lograr esto, está utilizando la palabra clave DISTINCT junto con la función SUM(). Sin embargo, te encuentras con un problema en el que las filas duplicadas inflan el resultado de SUM().
Para resolver este problema, considera las relaciones de clave principal en tus tablas. Si conversions.id es la clave principal de la tabla de conversiones y stats.id es la clave principal de la tabla de estadísticas, entonces cada conversions.id es exclusivo de un único link.id.
Según este entendimiento, puede reestructurar su consulta para calcular la suma de conversions.value para cada conversions.id distinta y luego dividir el resultado por el recuento total de filas dentro de cada grupo de links.id. Esto le proporcionará la suma deseada de valores distintos.
Aquí está la consulta revisada:
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;
Esta consulta debe calcular efectivamente la suma de conversions.value para cada conversions.id distinta dentro de cada grupo de links.id, asegurando que cada fila se cuente solo una vez.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3