繁体   English   中英

SQL select TOP 记录由多列中的几列分区

[英]SQL select TOP records partition by couples of column from multiple columns

我想得到的是所有总成本是TOP2的customer ,需要所有的属性。),

问题是SQL 用的太复杂了,有没有办法简化呢?

日期table和我的SQL如下所示:

区域 顾客 财产 成本
区域1 库斯1 财产11 成本11
区域1 库斯1 财产12 成本12
区域1 库斯2 财产21 成本21
SELECT
    area,
    customer,
    property,
    SUM(cost) AS cost
FROM
    table
WHERE
    customer IN
             (SELECT
                  f.customer
             FROM
                 (SELECT
                      p.area,
                      p.customer,
                      ROW_NUMBER() OVER(PARTITION BY area ORDER BY cost) AS number,
                      p.cost
                 FROM
                    (SELECT
                          area,
                          costomer,
                          SUM(cost) AS cost
                     FROM
                         table
                     GROUP BY
                         costomer
                     )a
                 WHERE number <=2
                 )aa
             )aaa
GROUP BY
    area,
    customer,
    property

您可以使用ROW_NUMBER() window function (或RANK()如果您想包括领带):

select t.area, t.customer, t.properties, t.cost
from (
  select area, customer, collect_set(property) properties, sum(cost) cost, 
    row_number() over (partition by area order by sum(cost) desc) rn
  from tablename
  group by area, customer
) t
where t.rn <= 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM