例如,我需要选择每个区域的前2位客户(不包括 property
),每个客户都有不同的属性,如
面积|客户|财产|成本
区域1 | cus1 |物业11 |成本11
区域1 | cus1 |物业12 |成本12
区域1 | cus2 |物业21 |成本21
通常下面的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
1条答案
按热度按时间jucafojl1#
你可以用
ROW_NUMBER()
窗口功能(或RANK()
如果您想包括领带):