如何在 BigQuery(标准 SQL)中获取表的前 N%(例如 50%)?

Mas*_*ary 5 sql count sql-order-by window-functions google-bigquery

我尝试过以下方法,但没有一个有效:

  1. 使用SELECT TOP 50 PERCENT:BigQuery没有top功能
  2. 使用LIMIT (SELECT COUNT(*) FROM tabl)/2:原因是 BigQuery 不接受任何非整数值。
  3. 使用SET设置中值,然后使用WHERE

GMB*_*GMB 6

在 BigQuery 中我会使用window functionpercent_rank()

select t.* except (prnk)
from (select t.*, percent_rank() over(order by id) prnk from mytable t) t
where prnk <= 0.5
Run Code Online (Sandbox Code Playgroud)

注意:您的问题的任何答案都需要您提供一列来对数据进行排序。我假设该专栏名为id.


Gor*_*off 1

一种方法使用窗口函数:

select t.* except (seqnum, cnt)
from (select t.*, row_number() over (order by ?) as seqnum,
             count(*) over () as cnt
      from t
     ) t
where seqnum <= cnt / 2;
Run Code Online (Sandbox Code Playgroud)