Agrupando linhas em SQL usando SUM() para valores distintos
Em sua consulta MySQL, você deseja calcular a soma de um valor em tabela de conversões, garantindo que cada linha seja contada apenas uma vez. Para conseguir isso, você está usando a palavra-chave DISTINCT em conjunto com a função SUM(). No entanto, você está enfrentando um problema em que linhas duplicadas estão inflando o resultado SUM().
Para resolver esse problema, considere os relacionamentos de chave primária em suas tabelas. Se Conversions.id for a chave primária da tabela de conversões e stats.id for a chave primária da tabela de estatísticas, então cada Conversions.id será exclusivo para um único links.id.
Com base nesse entendimento, você pode reestruturar sua consulta para calcular a soma de conversões.valor para cada conversões.id distinto e, em seguida, dividir o resultado pela contagem total de linhas em cada grupo links.id. Isso fornecerá a soma desejada de valores distintos.
Aqui está a 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 deve calcular efetivamente a soma de Conversions.value para cada Conversions.id distinto dentro de cada grupo Links.id, garantindo que cada linha seja contada apenas uma vez.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3