ClickHouse select 从加入的 table 条记录中计数(COUNT,JOIN)
ClickHouse select count from joined table records (COUNT, JOIN)
任何人都可以在以下问题中提出建议:
我有 2 个 table:
“T1”内容:
EVENT_ID| USER_ID | RECORD_CREATED_DATE |
_________________________________________
| 5f0172| 111 | 2020.07.13 |
| 5f0173| 222 | 2020.06.11 |
| 5f0174| 111 | 2020.08.20 |
“T2”内容:
| ID | USER_ID | RECORD_CREATED_DATE | SAVE_DATE |
___________________________________________________
| 1 | 111 | 2020.05.21 | 2020.05.21 |
| 2 | 222 | 2020.03.18 | 2020.03.18 |
| 3 | 111 | 2020.07.21 | 2020.07.21 |
| 4 | 222 | 2020.08.15 | 2020.08.15 |
并且我需要输出结果,以便从 table 2 可以从第一个获得 T1.RECORD_CREATED_DATE
和 T1.USER_ID
上下文中记录的记录数table 没有 GROUP BY USER_ID
EVENT_ID| USER_ID | RECORD_CREATED_DATE | COUNT(T2.Id) |
_______________________________________________________|
| 5f0172| 111 | 2020.07.13 | 1 | -> because tabl "T2" has 1 record less date 2020.07.13
| 5f0173| 222 | 2020.06.11 | 1 |
| 5f0174| 111 | 2020.08.20 | 2 |
有什么想法吗?
试试这个查询:
SELECT
EVENT_ID,
MAX(T1.USER_ID) AS USER_ID,
MAX(T1.RECORD_CREATED_DATE) AS RECORD_CREATED_DATE,
count() AS cnt
FROM T2
INNER JOIN T1 ON T1.USER_ID = T2.USER_ID
WHERE T2.RECORD_CREATED_DATE < T1.RECORD_CREATED_DATE
GROUP BY EVENT_ID
ORDER BY EVENT_ID ASC
/*
┌─EVENT_ID─┬─USER_ID─┬─RECORD_CREATED_DATE─┬─cnt─┐
│ 5f0172 │ 111 │ 2020-07-13 00:00:00 │ 1 │
│ 5f0173 │ 222 │ 2020-06-11 00:00:00 │ 1 │
│ 5f0174 │ 111 │ 2020-08-20 00:00:00 │ 2 │
└──────────┴─────────┴─────────────────────┴─────┘
*/
任何人都可以在以下问题中提出建议:
我有 2 个 table:
“T1”内容:
EVENT_ID| USER_ID | RECORD_CREATED_DATE |
_________________________________________
| 5f0172| 111 | 2020.07.13 |
| 5f0173| 222 | 2020.06.11 |
| 5f0174| 111 | 2020.08.20 |
“T2”内容:
| ID | USER_ID | RECORD_CREATED_DATE | SAVE_DATE |
___________________________________________________
| 1 | 111 | 2020.05.21 | 2020.05.21 |
| 2 | 222 | 2020.03.18 | 2020.03.18 |
| 3 | 111 | 2020.07.21 | 2020.07.21 |
| 4 | 222 | 2020.08.15 | 2020.08.15 |
并且我需要输出结果,以便从 table 2 可以从第一个获得 T1.RECORD_CREATED_DATE
和 T1.USER_ID
上下文中记录的记录数table 没有 GROUP BY USER_ID
EVENT_ID| USER_ID | RECORD_CREATED_DATE | COUNT(T2.Id) |
_______________________________________________________|
| 5f0172| 111 | 2020.07.13 | 1 | -> because tabl "T2" has 1 record less date 2020.07.13
| 5f0173| 222 | 2020.06.11 | 1 |
| 5f0174| 111 | 2020.08.20 | 2 |
有什么想法吗?
试试这个查询:
SELECT
EVENT_ID,
MAX(T1.USER_ID) AS USER_ID,
MAX(T1.RECORD_CREATED_DATE) AS RECORD_CREATED_DATE,
count() AS cnt
FROM T2
INNER JOIN T1 ON T1.USER_ID = T2.USER_ID
WHERE T2.RECORD_CREATED_DATE < T1.RECORD_CREATED_DATE
GROUP BY EVENT_ID
ORDER BY EVENT_ID ASC
/*
┌─EVENT_ID─┬─USER_ID─┬─RECORD_CREATED_DATE─┬─cnt─┐
│ 5f0172 │ 111 │ 2020-07-13 00:00:00 │ 1 │
│ 5f0173 │ 222 │ 2020-06-11 00:00:00 │ 1 │
│ 5f0174 │ 111 │ 2020-08-20 00:00:00 │ 2 │
└──────────┴─────────┴─────────────────────┴─────┘
*/