例如,我需要选择每个区域的前2位客户(没有property
列,并且每个客户都具有各种属性,例如
area1 | cus1 |物业11 | cost11
area1 | cus1 | property12 | cost12
area1 | cus2 |物业21 | cost21
通常,下面的SQL语句很好,但是这次table
是复杂的嵌套SQL语句,所以我想知道是否有更好的方法来简化它?(如果cus1在TOP2中,则需要所有属性。)] >
thx以获取任何解决问题的建议或链接。
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
)p
WHERE number <=2)A
)
GROUP BY
area,
customer,
property
例如,我需要选择每个区域的前2位客户(不包含属性列),并且每个客户都具有诸如area |客户|物业|成本区域1 | cus1 | ...
您可以使用ROW_NUMBER()
窗口功能(或如果要包含领带,可以使用RANK()
:]