【问题标题】:BigQuery running totalsBigQuery 运行总计
【发布时间】:2015-08-09 05:46:34
【问题描述】:

我无法在 BigQuery 中运行总计。

我找到了一个适用于此的示例: BigQuery SQL running totals

SELECT word, word_count, SUM(word_count) OVER(ORDER BY word DESC)
FROM [publicdata:samples.shakespeare]
WHERE corpus  = 'hamlet'
AND word > 'a' LIMIT 30

但我真正想做的是计算占总 word_count 80% 的最流行词的数量。所以我尝试先按 word_count 排序时计算运行总数:

SELECT word, word_count, SUM(word_count) OVER(ORDER BY word_count DESC)
FROM [publicdata:samples.shakespeare]
WHERE corpus  = 'hamlet'
AND word > 'a' LIMIT 30

但我明白了:

Row word    word_count  f0_  
1   o'er    18          18   
2   answer  13          31   
3   meet    8           39   
4   told    5           44   
5   treason 4           **52**   
6   quality 4           **52**   
7   brave   3           55  

从第 5 行到第 6 行的运行总数没有增加。可能是因为在这两种情况下 word_count 都是 4。

我做错了什么?

也许有更好的方法?我的计划是计算运行总数。然后将其除以 sum(word_count) OVER() 并仅过滤少于 80% 的行。然后计算这些行的数量。

【问题讨论】:

    标签: google-bigquery window-functions cumulative-sum


    【解决方案1】:

    首先,删除“LIMIT 30”——它会干扰 OVER() 子句。

    你想要一个比率?试试 RATIO_TO_REPORT:

    SELECT word, word_count, RATIO_TO_REPORT(word_count) OVER(ORDER BY word_count DESC)
    FROM [publicdata:samples.shakespeare]
    WHERE corpus  = 'hamlet'
    AND word > 'a' 
    

    您希望具有相同值的连续行增加吗?确定这些行的顺序,具有次要顺序:

    SELECT word, word_count, RATIO_TO_REPORT(word_count) OVER(ORDER BY word_count DESC, word)
    FROM [publicdata:samples.shakespeare]
    WHERE corpus  = 'hamlet'
    AND word > 'a' 
    

    您想要覆盖 80% 的最流行的词吗?把这些比率加起来,然后过滤掉其余的:

    SELECT word, word_count, sum_ratio
    FROM (
     SELECT word, word_count, SUM(ratio) OVER(ORDER BY ratio, word) sum_ratio
     FROM (
        SELECT word, word_count, RATIO_TO_REPORT(word_count) OVER(ORDER BY word_count DESC, word) ratio
        FROM [publicdata:samples.shakespeare]
        WHERE corpus  = 'hamlet'
        AND word > 'a' 
     )
    )
    WHERE sum_ratio>0.8
    
    Row word    word_count  sum_ratio    
    1   is      313         0.8125175752219499   
    2   it      361         0.827019644076648    
    3   in      400         0.8430884184308841   
    4   my      441         0.8608042421564295   
    5   you     499         0.8808500381633391   
    6   of      630         0.906158357771261    
    7   to      635         0.9316675370586108   
    8   and     706         0.9600289237938375   
    9   the     995         0.9999999999999999  
    

    【讨论】:

    • 非常感谢!这是关于窗口函数的真正迷恋课程。
    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多