Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql BigQuery中的限制groupby_Sql_Google Bigquery - Fatal编程技术网

Sql BigQuery中的限制groupby

Sql BigQuery中的限制groupby,sql,google-bigquery,Sql,Google Bigquery,我正在尝试按收入排名前3位的提供商,并按字母顺序为每个提供商排名前2位。以下是我必须从基本的查询分组开始- SELECT provider, title, SUM(customer_price) FROM [integrated-myth-156821:fintest.m10] GROUP BY title, provider LIMIT 25 以下是我得到的结果集: 表结构是提供者|标题|顾客|价格 下面是我希望得到的结果的示例: provider

我正在尝试按收入排名前3位的提供商,并按字母顺序为每个提供商排名前2位。以下是我必须从基本的查询分组开始-

SELECT
  provider,
  title,
  SUM(customer_price)
FROM
  [integrated-myth-156821:fintest.m10]
GROUP BY
  title,
  provider
LIMIT
  25
以下是我得到的结果集:

表结构是提供者|标题|顾客|价格

下面是我希望得到的结果的示例:

provider        title              sum(revenue)
Sony                               10000 // Top provider by revenue, limit 3
Sony            Avatar             400 // First title alphabetically, limit 2
Sony            Titanic            300
Fox                                8000
Fox             Fresh              12
Fox             Mike               800
WB                                 4500
WB              Harry              1000
WB              Potter             1200
试试下面

legacySQL 选择 提供者、头衔、收入 从…起 -按字母顺序排列的前3名供应商的前2名 选择 标题。提供方作为提供方, 标题。标题作为标题, 标题。收入作为收入, 顶级供应商。作为pos的收入 从…起 选择提供商、标题、收入、按提供商订单按标题超额支付的行数作为pos 从…起 选择提供商、标题、客户价格作为收入 来自[integrated-mystry-156821:fintest.m10] 按提供者、标题分组 作为头衔 参加 选择 供应商, 以客户价格作为收入 来自[integrated-mystry-156821:fintest.m10] 按提供商分组 按收入说明订购 限制3-设置前3个提供商 顶级供应商 顶部_providers.provider=titles.provider 其中位置<3-设置两个顶部标题 , -收入排名前三的供应商 选择 供应商, 作为标题, 将客户价格作为收入, 以pos的形式计算客户价格 来自[integrated-mystry-156821:fintest.m10] 按提供商分组 按收入说明订购 限制3-设置前3个提供商 按pos描述、供应商、标题订购 你能解释一下这个问题吗

此查询实际上是两个查询的并集 查询最底部的第二个按收入提供者提供前3名

第一个为前3名中的每个提供商提供前2个标题,并且其本身就是前3名提供商与标题收入的联合

下面表达式中的pos

按供应商订单按标题作为pos进行的行数超额分配 然后只允许筛选2个具有

其中pos<3
下面的解决方案使用BigQuery标准SQL

标准SQL 以topProviders为例 选择提供商、客户价格作为收入 来自'integrated-mystry-156821.fintest.m10` 按提供商分组 按收入说明订购 限制3 , 标题为 选择提供商、标题、客户价格作为收入 来自'integrated-mystry-156821.fintest.m10` 按提供者、标题分组 选择提供者、标题、收入 从…起 选择p.revenue作为排序, STRUCTp.provider作为标题,p.revenue作为提供者, 数组\u AGGSTRUCTt.provider,标题,按标题限制的收入顺序2作为标题 来自topProviders作为p 以t的形式连接标题 在p.provider=t.provider上 按p.provider分组,p.revenue ,UNNESTARRAY_CONCAT[供应商],标题 按排序说明、提供程序、标题排序
谢谢你-你能解释一些问题吗?例如,过度分割、联接和限制子选择?哇,这个查询非常有效!谢谢,两个查询在100M行数据集上花费的时间和处理的数据量相同-查询完成时间为2.8秒,处理的数据量为4.55 GB是。预计处理的数量相同。我认为选择使用哪种sql和各自的特性更多地取决于偏好。顺便说一句,感谢您修复代码:o