sql >> データベース >  >> RDS >> Mysql

パーセントを計算する方法は?

    アクティビティのあるユーザーに対する支払いを行ったユーザーの比率が必要な場合は、各テーブルを個別に要約してください。

    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;
    

    編集:

    範囲内のすべての日付を含むテーブルが必要です。それが最大の問題です。

    次に、お勧めします:

    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;
    

    注:

    • これはNULLを返します 活動がない日。それは0よりも私には理にかなっています 。
    • これは、日付と日付/時刻の値の両方で機能する日付のロジックを使用します。
    • 日付のロジックはインデックスを利用できます。これは、このタイプのクエリにとって重要な場合があります。
    • LEFT JOINの使用はお勧めしません s。これによりデータが増加し、クエリのコストが高くなる可能性があります。


    1. pdoは画像をデータベースに直接挿入します-常にBLOBを挿入します-0B

    2. ポイントインタイムリカバリを使用してPostgreSQLデータベースのRPOを最小化する方法

    3. Railsサーバーを起動できません

    4. XAMPPでmysqlデータベースを復元する方法は?