Mysql 我如何按分组,但仅按总和选择每个分组下的前10名?
我有一个很复杂的问题。。。以下查询通常导出到excel中:Mysql 我如何按分组,但仅按总和选择每个分组下的前10名?,mysql,sql,hive,Mysql,Sql,Hive,我有一个很复杂的问题。。。以下查询通常导出到excel中: select shop_type, shop_name, company, sum(amount) as amount, sum(counts) as count, from df group by shop_type,shop_name,company 公司只有两个价值观A和B。问题是,当我运行上述内容并将其放入枢轴时,我无法这样做,因为它太大了,例如500万行。。当我把它放在一个轴中时,我的行是shop_类型,sho
select
shop_type,
shop_name,
company,
sum(amount) as amount,
sum(counts) as count,
from df
group by shop_type,shop_name,company
公司只有两个价值观A和B。问题是,当我运行上述内容并将其放入枢轴时,我无法这样做,因为它太大了,例如500万行。。当我把它放在一个轴中时,我的行是shop_类型,shop_名称和shop_类型下嵌套的shop_名称,列是company,然后我按总计从大到小排序,同时也为shop_类型下的每个shop_名称从大到小排序
如何运行上述操作,但仅选择两家公司每种店铺类型下金额占比最大的前10个店铺名称,即total?使用窗口功能:
select df.*
from (select shop_type, shop_name, company,
sum(amount) as amount, sum(counts) as count,
row_number() over (partition by company, shop_type order by sum(amount) desc) as seqnum
from df
group by shop_type,s hop_name, company
) df
where seqnum <= 10;
注意:您的问题也被标记为Hive。以上是标准SQL,但配置单元在混合聚合和窗口函数方面可能有点古怪。如果是,则可以使用一个或多个级别的子查询:
select df.*
from (select df.*
row_number() over (partition by company, shop_type order by sum(amount) desc) as seqnum
from (select shop_type, shop_name, company,
sum(amount) as amount, sum(counts) as count
from df
group by shop_type,s hop_name, company
) df
) df
where seqnum <= 10;
将查询分为2个查询,每个查询分别针对不同的公司,其中公司='A'和公司='B'。然后将它们连接起来,获得最终输出,而无需旋转。