我正在使用一个查看用户帐户并跟踪行为的数据库。有时用户帐户已连接(例如,用户已结婚)。
对于我正在做的特定分析,我想避免重复计算已连接用户,因为这会增加我的转化次数。以下是样本数据集。
在不重复计算连接用户的情况下,如何计算具有非空日期的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
这显然不会说明已关联的帐户,并且会增加我的数量。
感谢您的帮助!
答案 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;