PostgreSQL:基于空值或非空值排除连接的ID

时间:2018-10-18 14:47:42

标签: sql postgresql count

我正在使用一个查看用户帐户并跟踪行为的数据库。有时用户帐户已连接(例如,用户已结婚)。

对于我正在做的特定分析,我想避免重复计算已连接用户,因为这会增加我的转化次数。以下是样本数据集。

在不重复计算连接用户的情况下,如何计算具有非空日期的ID数量?如您所见,有时connected_id是3个id的链。

|   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 :(得分:1)

这是我尝试使用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

答案 1 :(得分:0)

您可以使用COUNT(col)代替COUNT(*)

Select DATE_A, count(Connected_id) FROM table_1 GROUP BY DATE_A;