Считать ежемесячных пользователей только с действием Mysql - PullRequest
0 голосов
/ 02 марта 2020

Мне нужно сосчитать активных пользователей на веб-сайте, у которых был платеж или действие в течение этого месяца. В моем текущем запросе я получаю всех активных пользователей в каждом соответствующем месяце, не имея возможности отфильтровать количество пользователей в соответствии с моими критериями (действия> 0 или продажи> 0)

У меня есть следующий запрос с этим вывод:

SELECT
    * 
FROM
    (
    SELECT
        date_format( SUMMARY_DATE, '%Y-%m' ) AS Month_,
        sum( CASE TRAN_TYPE WHEN 'DEPOSIT' THEN AMOUNT_REAL ELSE 0 END ) AS Payments,
        sum(
        CASE
                TRAN_TYPE 
                WHEN 'GAME_BET' THEN
                - AMOUNT_REAL - AMOUNT_RELEASED_BONUS - AMOUNT_PLAYABLE_BONUS 
                WHEN 'GAME_WIN' THEN
                - AMOUNT_REAL - AMOUNT_RELEASED_BONUS - AMOUNT_PLAYABLE_BONUS 
                WHEN 'REFUND' THEN
                - AMOUNT_REAL - AMOUNT_RELEASED_BONUS - AMOUNT_PLAYABLE_BONUS ELSE 0 
            END 
            ) AS Sales,
            sum(
            CASE
                    TRAN_TYPE 
                    WHEN 'GAME_BET' THEN
                    - AMOUNT_REAL - AMOUNT_RELEASED_BONUS - AMOUNT_PLAYABLE_BONUS ELSE 0 
                END 
                ) AS Actions,
                sum(
                CASE
                        TRAN_TYPE 
                        WHEN 'GAME_BET' THEN
                        - AMOUNT_REAL 
                        WHEN 'GAME_WIN' THEN
                        - AMOUNT_REAL 
                        WHEN 'REFUND' THEN
                        - AMOUNT_REAL ELSE 0 
                    END 
                    ) AS GGRrm 
                FROM
                    DataFeedConsCore 
                GROUP BY
                    Month_ 
                ORDER BY
                    Month_ ASC 
                ) T1
                LEFT JOIN (
                SELECT
                    count( DISTINCT USERID ) as active_users,
                    date_format( SUMMARY_DATE, '%Y-%m' ) AS Month_ 
                FROM
                    DataFeedConsCore 
                GROUP BY
                Month_ 
    ) T2 ON T2.Month_ = T1.Month_

вывод выглядит следующим образом:

+---------+----------+----------+-----------+-------+--------------+---------+
| Month_  | Payments | Sales    | Actions   | GGRrm | active_users | Month_  |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2019-07 | 3255     | 2570     | 68280.95  | 1755  | 49           | 2019-07 |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2019-08 | 5960     | 2818     | 153403.58 | 960   | 47           | 2019-08 |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2019-09 | 2115     | 3522     | 79163     | 2115  | 60           | 2019-09 |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2019-10 | 816      | 1441     | 46456.7   | 816   | 65           | 2019-10 |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2019-11 | 0        | 361.23   | 1301.18   | 0     | 198          | 2019-11 |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2019-12 | 150      | 498.93   | 4488.6    | 299   | 91           | 2019-12 |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2020-01 | 2755     | 2875.55  | 218634    | 905   | 162          | 2020-01 |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2020-02 | 19160    | 12447.63 | 240361.62 | 6803  | 319          | 2020-02 |
+---------+----------+----------+-----------+-------+--------------+---------+
| 2020-03 | 750      | 1080     | 8070      | 750   | 30           | 2020-03 |
+---------+----------+----------+-----------+-------+--------------+---------+

Как я могу убедиться, что в число COUNT active_users входят ТОЛЬКО пользователи с платежом> 0 или действиями> 0?

Вот это sqlfiddle

1 Ответ

1 голос
/ 02 марта 2020

Ищите

SELECT * 
FROM (  SELECT  date_format( SUMMARY_DATE, '%Y-%m' ) AS Month_,
                sum( CASE   WHEN TRAN_TYPE = 'DEPOSIT' 
                            THEN AMOUNT_REAL 
                            ELSE 0 
                            END ) AS Payments,
                sum( CASE   WHEN TRAN_TYPE IN ('GAME_BET', 'GAME_WIN', 'REFUND') 
                            THEN - AMOUNT_REAL - AMOUNT_RELEASED_BONUS - AMOUNT_PLAYABLE_BONUS 
                            ELSE 0 
                            END ) AS Sales,
                sum( CASE   WHEN TRAN_TYPE = 'GAME_BET' 
                            THEN - AMOUNT_REAL - AMOUNT_RELEASED_BONUS - AMOUNT_PLAYABLE_BONUS 
                            ELSE 0 
                            END ) AS Actions,
                sum( CASE   WHEN TRAN_TYPE IN ('GAME_BET', 'GAME_WIN', 'REFUND')
                            THEN - AMOUNT_REAL 
                            ELSE 0 
                            END ) AS GGRrm 
        FROM    DataFeedConsCore 
        GROUP BY    Month_ 
     ) T1
LEFT JOIN ( SELECT Month_,
                   COUNT(*) active_users
            FROM (  SELECT  date_format( SUMMARY_DATE, '%Y-%m' ) AS Month_,
                            sum( CASE   WHEN TRAN_TYPE = 'DEPOSIT' 
                                        THEN AMOUNT_REAL 
                                        ELSE 0 
                                        END ) AS Payments,
                            sum( CASE   WHEN TRAN_TYPE = 'GAME_BET' 
                                        THEN - AMOUNT_REAL - AMOUNT_RELEASED_BONUS - AMOUNT_PLAYABLE_BONUS 
                                        ELSE 0 
                                        END ) AS Actions 
                    FROM    DataFeedConsCore 
                    GROUP BY    Month_, USERID ) T3
            WHERE Payments > 0 
               OR Actions > 0     
            GROUP BY    Month_
          ) T4 ON T4.Month_ = T1.Month_
;

скрипка

...