Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MYSQL sum() dla różnych wierszy

Może się mylę, ale z tego, co rozumiem

  • conversion.id jest kluczem podstawowym Twojej tabeli konwersje
  • stats.id jest kluczem podstawowym Twojej tabeli statystyki

Tak więc dla każdego Conversion.id, na który ma wpływ co najwyżej jeden links.id.

Twoja prośba jest trochę jak robienie kartezjańskiego produktu z 2 zestawów:

[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 dla każdego linku otrzymasz sizeof([kliknięcia]) x sizeof([conversions]) linii

Jak zauważyłeś, liczbę unikalnych konwersji w Twoim żądaniu można uzyskać za pośrednictwem

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

ten odrębny usuwa wszystkie linie [kliknięć] w produkcie kartezjańskim

ale wyraźnie

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

W twoim przypadku, ponieważ

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

masz

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

więc przetestowałbym twoją prośbę za 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;

Informuj mnie !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. Odmowa dostępu Java JDBC dla użytkownika

  2. Jak uruchomić, ponownie uruchomić, sprawdzić status i zatrzymać serwer MySQL

  3. Najlepsze praktyki dotyczące tworzenia indeksów w tabelach MySQL — kompilacja indeksu kroczącego

  4. Jak dodać ograniczenie not null do istniejącej kolumny w MySQL?

  5. błąd wykonania:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver