【问题标题】:Bigquery - How to get only one max value when a window function has all the same valuesBigquery - 当窗口函数具有所有相同的值时如何只获得一个最大值
【发布时间】:2022-01-06 18:06:38
【问题描述】:

我正在使用 Google BigQuery 中的一个窗口函数来最大程度地为客户附加这样的价值:

SELECT customer_key, store_location,
    FIRST_VALUE(store_key) OVER (
        PARTITION BY customer_key
        ORDER BY visits DESC
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
    ) AS fav_store
FROM VISIT_DB
ORDER BY customer_key ASC

它可以很好地为我提供更多客户访问的商店。但是,有些情况下,客户在 3 个不同的商店中的访问次数相同,并且此函数返回相同的 3 个值。

例如,当客户 111 在商店 A、B 和 C 中访问了 3 次时,因为它们的访问次数都相同,我希望退回其中的任何一个而不是全部三个。

我也尝试使用LAST_VALUEMAX,但是当访问次数相同时,他们三个返回所有商店。

我怎样才能让它只返回一个?

【问题讨论】:

    标签: sql google-bigquery window-functions


    【解决方案1】:

    我能够使用此脚本获得您预期的输出:

    SELECT customer_key, store_location, store_key as fav_store 
    FROM (
        SELECT *, ROW_NUMBER() OVER(partition by customer_key order by visits desc) rn
        FROM mydataset.mytable
    ) t1
    WHERE rn = 1
    ORDER BY customer_key
    

    样本数据:

    customer_key    store_key   store_location  visits
    111                 A             A           3
    111                 C             C           3
    111                 B             B           3 
    111                 D             D           2
    222                 D             D           5
    222                 A             A           3
    222                 B             B           3
    222                 C             C           3
    333                 B             B           3
    333                 A             A           1
    444                 C             C           4
    

    结果:

    【讨论】:

      【解决方案2】:

      考虑以下方法

      select as value array_agg(t order by visits desc limit 1)[offset(0)]
      from your_table t
      group by customer_key
      

      【讨论】:

        猜你喜欢
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2021-06-18
        相关资源
        最近更新 更多