【发布时间】:2022-12-20 03:22:02
【问题描述】:
我有一个包含 5 列的表 TAB,
col1: 字符串 ('AAA', 'BBB', ...)
col2: 字符串 (null, 'XYZ', ...)
col3:时间戳('2020-01-01 00:00:00',...)
col4: 字符串 ('A1A', 'B1B', ...)
col5: 字符串 ('A2A', null, ...)
SELECT
col1,
col2,
DATE(col3) as date,
COUNTIF(NULLIF(TRIM(col4),"") IS NULL) AS col4_isnull_total,
COUNTIF(NULLIF(TRIM(col5),"") IS NULL) AS col5_isnull_total,
COUNTIF(NULLIF(TRIM(col2),"") IS NULL) OVER (PARTITION BY col1, DATE(col3) AS col2_isnull_total
FROM TAB
WHERE DATE(col3) BETWEEN '2020-01-01' AND '2020-01-31'
GROUP BY col1, col2, DATE(col3)
我想要达到的结果是,
| col1 | col2 | date | col4_isnull_total | col5_isnull_total | col2_isnull_total |
|---|---|---|---|---|---|
| AAA | null | 2020-01-01 | 11 | 15 | 3 |
| AAA | XYZ | 2020-01-01 | 30 | 45 | 3 |
| AAA | ABC | 2020-01-01 | 10 | 5 | 3 |
| AAA | null | 2020-01-02 | 1 | 15 | 1 |
| AAA | XYZ | 2020-01-02 | 3 | 45 | 1 |
| AAA | ABC | 2020-01-02 | 10 | 5 | 1 |
| BBB | null | 2020-01-01 | 7 | 5 | 4 |
| BBB | XYZ | 2020-01-01 | 3 | 35 | 4 |
| BBB | ABC | 2020-01-01 | 14 | 19 | 4 |
| ... | ... | ... | ... | ... | ... |
所以,基本上我想通过 col1、col2 和 DATE(col3) 进行聚合,并使用 group by 查找空值的数量,并使用 partition by 通过 col1 和 DATE(col3) 查找 col2 中的空值数量@
我得到的错误是PARTITION BY expression references column col3 which is neither grouped nor aggregated
【问题讨论】:
-
你会试试
GROUP BY 1, 2, 3吗? ?或GROUP BY col1, col2, date? -
我两个都试了,没用
标签: sql group-by google-bigquery partition-by