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

Jak vypočítat procento?

Pokud chcete poměr uživatelů, kteří provedli platby, a uživatelů s aktivitou, shrňte každou tabulku jednotlivě:

select p.cnt / a.cnt
from (select count(distinct user_id) as cnt from activity a) a cross join
     (select count(distinct user_id) as cnt from payment) p;

EDIT:

Potřebujete tabulku se všemi daty v rozsahu. To je největší problém.

Pak bych doporučil:

SELECT d.dte,
       ( ( SELECT COUNT(DISTINCT p.user_id)
           FROM payments p
           WHERE p.payment_date >= d.dte and p.payment_date < d.dte + INTERVAL 1 DAY
          ) /
          NULLIF( (SELECT COUNT(DISTINCT a.user_id)
                   FROM activity a
                   WHERE a.login_time >= d.dte and p.login_time < d.dte + INTERVAL 1 DAY
                  ), 0
                 ) as ratio
FROM (SELECT date('2017-01-01') dte UNION ALL
      SELECT date('2017-01-02') dte UNION ALL
      SELECT date('2017-01-03') dte UNION ALL
      SELECT date('2017-01-04') dte UNION ALL
      SELECT date('2017-01-05') dte 
     ) d;

Poznámky:

  • To vrátí NULL ve dnech, kdy není žádná aktivita. To mi dává větší smysl než 0 .
  • Toto používá pro data logiku, která funguje jak pro data, tak pro hodnoty data/času.
  • Logika pro data může využívat index, který může být pro tento typ dotazu důležitý.
  • Nedoporučuji používat LEFT JOIN s. To znásobí data, což může dotaz prodražit.


  1. Jak upravit podřetězce?

  2. Vypršel časový limit připojení pro SQL server

  3. Důležité kontroly stavu vašich serverů MySQL se zdrojovými replikami

  4. Vyberte každý měsíc, i když měsíc v tabulce mysql neexistuje