【问题标题】:How do you remove duplicate rows of primary key and also group by in SQL Bigquery?您如何删除重复的主键行并在 SQL Bigquery 中分组?
【发布时间】:2020-06-11 23:10:27
【问题描述】:

SQL BigQuery - 我在需要删除的主键上有重复的行(我不想从表中永久删除)。我必须 GROUP BY 其他几个字段来聚合结果,并且遇到问题,因为我必须包含主键但不能按它分组并同时删除重复项。

我在堆栈上看到了示例,但在应用于此案例时遇到了问题。我已经尝试了以下方法,但这并没有导致任何分组,因为我必须按 ID 分组才能将其保留在 select 语句中。

SELECT Distinct (ID),Event_ID,Event_Name,Sum(Quantity), Sum(Price*Quantity)
FROM table
GROUP BY ID, Event_ID, Event_Name

我尝试从 group by 子句中删除 ID 并添加“Min (Distinct (ID))”作为第一个选择行,但这并没有删除重复项。

我也试过了

SELECT Distinct (ID),Event_ID, Event_Name, Sum(Quantity) ,Sum(Price*Quantity), 
FROM table

INNER JOIN 
  (SELECT ID as DeduplicatedID
  FROM table 
  GROUP BY ID) deduplicatedtable ON table.ID = deduplicatedtable.ID

GROUP BY ID, Event_ID, Event_Name

和received this error

提前致谢!

ID 级别的组,但是其中一些 ID 具有重复项,当按事件分组时提供不正确的 TotalQuantity 和 TotalRevenue 数字

我希望分组数据看起来像什么,但这是不正确的,并且在数量和 rev 字段相加时包含重复的 ID。

【问题讨论】:

  • 主键——根据定义——没有重复项。请解释哪些列或哪些列不应重复。样本数据和期望的结果会有所帮助。
  • 正确 - 我猜它应该是主键,但由于某种原因,某些行存在重复,我无法解析出押韵或为什么它只有一些行而不是其他行的原因...我现在正在将数据截图添加到原始帖子
  • 添加了上面的图片
  • 究竟复制了什么?整行还是只有 id 值?我的意思是,对于重复的 ID 值,该行的其余部分是相似的还是不同的?
  • 在post 中有几个答案可以做到这一点,包括 Gordon 的。试试this one

标签: sql group-by google-bigquery duplicates grouping


【解决方案1】:

这是你想要的吗?

SELECT MIN(ID) as id, Event_ID,Event_Name,Sum(Quantity), Sum(Price*Quantity)
FROM table
GROUP BY Event_ID, Event_Name

【讨论】:

  • 不幸的是,这并没有为我摆脱重复;不知道为什么
  • 添加,当我运行它时,它会删除所有其他不重复且不是最小 ID 的 ID
【解决方案2】:

尝试做

WITH t as (
SELECT Distinct *
FROM table
)
SELECT ID, Event_ID, Event_Name, Sum(Quantity), Sum(Price*Quantity)
FROM t
GROUP BY ID, Event_ID, Event_Name

【讨论】:

    【解决方案3】:

    如果我怀疑有一个字段不重复,找到它并使用ANY_VALUE(not_duplicated_field)。
    ANY_VALUE function 从输入返回任何值,如果输入行为零,则返回 NULL。返回的值是不确定的,这意味着您每次使用此函数时可能会收到不同的结果。

    例如:

    SELECT DISTINCT ID, Event_ID, ANY_VALUE(Event_Name), sum(Quantity), sum(Price*Quantity)
    FROM blabla.jack
    GROUP BY id, Event_ID
    

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多