MYSQL - как получить процент подключенных пользователей, сгруппированных по месяцам - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь написать эффективный запрос, чтобы получить процент подключенных пользователей, сгруппированных по месяцам и user_group, с учетом следующих 2 таблиц:

  • соединений (id, connection_date, user_id)
  • пользователей (user_id, user_group, creation_date)

Я использую MySQL.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Вам нужно объединить две таблицы в столбце идентификатора пользователя.Затем просто сгруппируйте по user_group и по месяцу даты подключения.Вы можете использовать DATEPART в SQL Server для этого.

Примерно так:

SELECT u.user_group, DATEPART(MONTH, c.connection_date) AS month, COUNT(c.id)
FROM connections c INNER JOIN users u
  ON c.user_id = u.user_id
GROUP BY u.user_group, DATEPART(MONTH, c.connection_date);
0 голосов
/ 18 февраля 2019

Я полагаю, что значение connection.connection_date & users.creation_date составляет datetime .

Чтобы получить процент подключенных пользователей за месяц против всего пользователей на тот месяц , используйте:

SELECT u.user_group,  DATE_FORMAT(`c`.`connection​_date`, "%M %Y") AS month,
COUNT(DISTINCT u.`user_id`) / (SELECT COUNT(`user_id`) FROM users WHERE users.creation_date <= adddate(last_day(`c`.`connection​_date`), 1) AND users.user_group = u.user_group) AS percentage,
COUNT(DISTINCT u.`user_id`) as loggedThisMonth,
(SELECT COUNT(`user_id`) FROM users WHERE users.creation_date <= adddate(last_day(`c`.`connection​_date`), 1) AND users.user_group = u.user_group) AS totalRegisteredToMonth
FROM connections c LEFT JOIN users u ON c.`user_id` = u.`user_id`
GROUP BY u.user_group, DATE_FORMAT(`c`.`connection​_date`, "%M %Y")
ORDER BY DATE_FORMAT(`c`.`connection​_date`, "%Y %m"), u.user_group ASC

Это работает:

  • подсчет DISTINCT users.user_ id которые подключались каждый месяц, таким образом предотвращая пересчет пользователей с несколькими подключениями в месяц COUNT(DISTINCT u.user_​id)
  • , используя подвыбор для вычисления зарегистрированных пользователей группы пользователей дов этом месяце (SELECT COUNT( user_id ) FROM users WHERE users.creation_date <= adddate(last_day( c . connection_date ), 1) AND users.user_group = u.user_group)

Ссылка:

adddate(last_day(`c`.`connection​_date`), 1)

возврат 1-го числа следующего месяца дата

0 голосов
/ 15 февраля 2019

Проверьте эту ссылку: http://thisinterestsme.com/php-calculate-percentage-of-number/.

А вот sql:

<?php

$conn = mysqli_connect("localhost", "UserName", "Password", "Database");
for($m=01;$m < 13; $m++) {

    $sql = "SELECT user_group FROM users WHERE creation_date LIKE '%" . $m . "%'";
    $result = $conn->query($sql);
    $users = [];
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $users[] = $row["user_group"];
        };
    };
    $matchUserAmnt = count($users);
    $sql = "SELECT * FROM users";
    $result = $conn->query($sql);
    $user_amnt = $result->num_rows;
    //My number is the amount of users.
    $percent = round($matchUserAmnt / ($user_amnt / 100),2);
    echo "The percent of users who joined in the month " . $m . "is " . $percent;


};

Не стесняйтесь редактировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...