PostgreSQL: исключая связанные идентификаторы, основанные на нулевом или не нулевом значении - PullRequest
0 голосов
/ 18 октября 2018

Я работаю с базой данных, которая просматривает учетные записи пользователей и отслеживает их поведение.Иногда учетные записи пользователей связаны (например, пользователи состоят в браке).

Для конкретного анализа, который я делаю, я хочу избежать двойного учета подключенных пользователей, поскольку это приведет к увеличению числа конверсий.Ниже приведен пример набора данных.

Как бы подсчитать количество идентификаторов с ненулевой датой без двойного учета подключенных пользователей?Как видите, иногда connected_id представляет собой цепочку из 3 идентификаторов.

|   ID   |   Connected_ID    |  DATE_A      |
|   1    |      10           | 2018-09-15   |
|   2    |                   | 2018-10-02   |
|   3    |      5            | 2018-06-01   |
|   4    |                   | 2018-06-01   |
|   5    |      7            |              |
|   6    |                   | 2018-07-10   |
|   7    |      5            | 2018-06-01   |
|   8    |                   |              |
|   9    |                   | 2018-05-05   |
|   10   |      1            | 2018-09-15   |

Из этого примера я хотел бы получить следующий результат:

|  DATE_A   |   COUNT_IDS  |
| 2018-05-05|     1        |
| 2018-06-01|     2        |
| 2018-07-10|     1        |
| 2018-09-15|     1        |
| 2018-10-02|     1        |

Обычно я выполняю это с помощью SQL-запроса, подобного приведенному ниже:

Select DATE_A, count(*) FROM table_1 GROUP BY 1

Это, очевидно, не будет учитывать подключенные учетные записи и приведет к увеличению моего счета.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вот моя попытка использовать UNION для объединения двух запросов

SELECT Date_A, COUNT(id_count) 
FROM (SELECT Date_A, 1 as id_count
      FROM test
      WHERE DATE_A IS NOT NULL AND connected_id IS NULL
      UNION 
      SELECT Date_A, 2 as id_count
      FROM test
      WHERE DATE_A IS NOT NULL AND connected_id IS NOT NULL) as uni
GROUP BY Date_A
0 голосов
/ 18 октября 2018

Вы можете использовать COUNT(col) вместо COUNT(*):

Select DATE_A, count(Connected_id) FROM table_1 GROUP BY DATE_A;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...