Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Mysql 我如何按分组,但仅按总和选择每个分组下的前10名?_Mysql_Sql_Hive - Fatal编程技术网

Mysql 我如何按分组,但仅按总和选择每个分组下的前10名?

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

我有一个很复杂的问题。。。以下查询通常导出到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_类型,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'。然后将它们连接起来,获得最终输出,而无需旋转。