【问题标题】:Join two tables with pre aggregated Values results in neither grouped nor aggregated error使用预先聚合的值加入两个表,既不会导致分组错误,也不会导致聚合错误
【发布时间】:2021-08-13 19:44:48
【问题描述】:

我一直在尝试连接表,其中一个包含 UserId,另一个包含用户执行的每个操作的行。目标是汇总用户每天执行的操作。

表 1:

| UserId   | date           |
| -------- | -------------- |
| 13       | 2021-08-04     |
| 13       | 2021-08-05     |
| 13       | 2021-08-06     |
| 14       | 2021-08-04     |
| 14       | 2021-08-05     |
| 14       | 2021-08-06     |
| 15       | 2021-08-05     |
| 15       | 2021-08-06     |

表 2:

UserID ActionDate ActionVal
13 2021-08-04 2.6
13 2021-08-04 5
13 2021-08-05 15
14 2021-08-05 7
14 2021-08-05 2
14 2021-08-05 0
15 2021-08-05 13
15 2021-08-06 27

我的查询:

SELECT Table1.UserId,Table1.date,aggTable2.tdTotalValue, aggTable2.controlDate, aggTable2.controlUserId

FROM Table1
JOIN(
SELECT
SUM(ActionVal) tdTotalValue,
ActionDate controlDate
UserId controlUserId
FROM Table2
GROUP BY ActionDate, UserId 
) as aggTable2
ON aggTable2.controlDate = Table1.date AND Table1.UserId = aggTable2.controlUserId
GROUP BY aggTable2.controlDate,Table1.UserId

但是,这会导致返回错误: SELECT 列表表达式引用 aggTable2.tdTotalValue 既不分组也不聚合为 1:1

这对我来说真的很奇怪,因为我已经预先汇总了表格以确保不会发生这种情况。

我很迷茫,感谢所有建议。

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    看起来您已经在 aggTable2 子查询中处理了聚合 - 您应该删除 GROUP BY aggTable2.controlDate,Table1.UserId(在查询的最后一行)

    如果这样做,结果输出将是

    我使用下面的查询作为测试(上面给出了输出)

    SELECT 
      Table1.UserId,
      Table1.date,
      aggTable2.tdTotalValue, 
      aggTable2.controlDate, 
      aggTable2.controlUserId
    FROM Table1
    JOIN (
      SELECT
        SUM(ActionVal) tdTotalValue,
        ActionDate controlDate,
        UserId controlUserId
      FROM Table2
      GROUP BY ActionDate, UserId 
    ) as aggTable2
    ON aggTable2.controlDate = Table1.date 
    AND Table1.UserId = aggTable2.controlUserId
    

    注意:这是假设您在表 1 中没有重复项 - 根据样本数据,这似乎是正确的

    【讨论】:

    • 谢谢,我检查了我的数据,表 1 中没有重复项,不过,即使没有分组,我也会收到相同的错误。我是否遗漏了 Big Query 特定的内容?
    • 这根本不可能是真的,所以请仔细检查你是否真的删除了最后一组!
    • 我添加了用于测试您问题中的样本数据的查询 - 检查一下,如果仍然存在问题,请告知!
    • 您是对的,其余错误与此无关。感谢您的帮助
    • 当然,很高兴我们做到了:o)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多