【问题标题】:Removing duplicate values without using distinct删除重复值而不使用 distinct
【发布时间】:2025-12-14 20:40:02
【问题描述】:

我使用 BigQuery 编写了以下查询,它给了我重复的文章值。我尝试过使用 distinct,但它似乎无法以某种方式工作,所以现在我正在研究用其他方法删除重复项。

select
      replace(article, ' - paper', '') as p,
      pageviews,
      login_clicks,
      paywall_clicks
    from analytics.article_action_week

【问题讨论】:

  • 仅供参考,select distinct 适用于整个选定的行。
  • 你可以试试 distinct 然后复制粘贴两个重复的行吗?
  • @SaimNazir 。 . .请解释您所说的“独特”是什么意思。当您使用 SELECT DISTINCT 时,BigQuery 会删除 IT 认为重复的内容。

标签: sql google-bigquery


【解决方案1】:

您可以在 BigQuery 中使用聚合来删除重复项:

select replace(article, ' - paper', '') as p,
       any_value(struct(pageviews, login_clicks, paywall_clicks)
                ).*
from analytics.article_action_week aaw
group by p; 

注意:这将返回任意行。我可能会从上下文中建议您实际上想要聚合:

select replace(article, ' - paper', '') as p,
       sum(pageviews) as pageviews,
       sum(login_clicks) as login_clicks, 
       sum(paywall_clicks) as paywall_clicks
from analytics.article_action_week aaw
group by p;

这会将不同行的度量相加。

【讨论】:

    【解决方案2】:

    您可以使用row_number() 进行检查:

    select replace(wk.article, ' - paper', '') as p, wk.pageviews, wk.login_clicks, wk.paywall_clicks, 
           row_number() over (partition by replace(wk.article, ' - paper', '') order by ?) as seq
    from analytics.article_action_week wk;
    

    您可以使用1 过滤序列以获得唯一行。改用排序列?

    【讨论】:

      【解决方案3】:

      按功能分组可能会有所帮助。

      select
        replace(article, ' - paper', '') as p,
        pageviews,
        login_clicks,
        paywall_clicks
      from analytics.article_action_week group by article
      

      【讨论】: