Mysql
 sql >> база данни >  >> RDS >> Mysql

MYSQL sum() за отделни редове

Може и да греша, но доколкото разбирам

  • conversions.id е първичният ключ от Вашите таблици преобразувания
  • stats.id е първичният ключ от вашата таблица статистика

По този начин за всеки conversions.id имате най-много един links.id засегнат.

Искането ви е като да направите декартовия продукт от 2 комплекта :

[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 

и за всяка връзка получавате sizeof([кликове]) x sizeof([конверсии]) редове

Както отбелязахте, броят на уникалните реализации във вашата заявка може да бъде получен чрез

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

този различен успява да премахне всички [кликове] линии в декартовия продукт

но ясно

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

Във вашия случай, тъй като

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

имате

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

така че бих тествал вашата заявка с

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;

Дръж ме в течение !Jerome



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да премахнете водещите празни места в MySQL

  2. Импортирайте MySQL база данни в MS SQL Server

  3. Присъединяване на таблици с проблем SUM в MYSQL

  4. TIMESTAMPADD() Примери – MySQL

  5. SQL DELETE с JOIN друга таблица за условие WHERE