sql >> Databáze >  >> RDS >> Mysql

MYSQL sum() pro různé řádky

Možná se mýlím, ale z toho, co jsem pochopil

  • conversions.id je primární klíč z vaší tabulky konverzí
  • stats.id je primární klíč statistik vaší tabulky

Pro každý conversions.id máte tedy ovlivněný maximálně jeden links.id.

Váš požadavek je trochu jako dělat kartézský součin 2 sad:

[clicks]
SELECT *
FROM links 
LEFT OUTER JOIN stats ON links.id = stats.parent_id 

[conversions]
SELECT *
FROM links 
LEFT OUTER JOIN conversions ON links.id = conversions.link_id 

a pro každý odkaz získáte sizeof([kliknutí]) x sizeof([konverze]) řádků

Jak jste si všimli, počet jedinečných konverzí ve vaší žádosti lze získat prostřednictvím

count(distinct conversions.id) = sizeof([conversions])

tento rozdíl dokáže odstranit všechny čáry [kliknutí] v kartézském součinu

ale jasně

sum(conversions.value) = sum([conversions].value) * sizeof([clicks])

Ve vašem případě od

count(*) = sizeof([clicks]) x sizeof([conversions])
count(*) = sizeof([clicks]) x count(distinct conversions.id)

máte

sizeof([clicks]) = count(*)/count(distinct conversions.id)

takže bych váš požadavek otestoval pomocí

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;

Informujte mě, Jerome



  1. Jak UPDATE z SELECT na SQL Server

  2. Vložení obrázku z Oracle do SQL Serveru

  3. Jak získat aktuální verzi systému správy databází MySQL (DBMS)?

  4. Proces aktualizace krok za krokem pro aktualizaci R12.2, část -1