Sql BigQuery中的限制groupby
我正在尝试按收入排名前3位的提供商,并按字母顺序为每个提供商排名前2位。以下是我必须从基本的查询分组开始-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
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