如何解决如何找到等值的行?
我有一张桌子Accounts
AMOUNT| ID_CLIENT | ID_BRANCH
250 1 1
250 1 3
100 1 4
300 2 1
300 2 3
450 3 2
100 3 2
225 4 1
225 4 2
225 4 4
225 4 5
我需要找到每个分支中具有相同金额的客户(例如ID_CLIENT = 2和ID_CLIENT = 4)。我不知道该如何实施(有人可以帮我吗?
解决方法
使用两种聚合级别:
select client
from (select client,branch,sum(amount) as amount
from t
group by client,branch
) cb
group by client
having min(amount) = max(amount);
我无法确定每个客户/分支机构是否可以有多行。如果没有,您只需要:
select client
from t
group by client
having min(amount) = max(amount);
,
您可以使用分析函数来实现相同功能:
with CTE1 as
(
SELECT A.*,DENSE_RANK() OVER (PARTITION BY ID_CLIENT ORDER BY AMOUNT) DN,COUNT(*) OVER (PARTITION BY ID_CLIENT) TOTAL_COUNT
FROM TABLE1 A ORDER BY ID_CLIENT
)
SELECT ID_CLIENT FROM
(
SELECT ID_CLIENT,SUM(DN),TOTAL_COUNT
FROM CTE1
GROUP BY ID_CLIENT,TOTAL_COUNT
HAVING SUM(DN) = TOTAL_COUNT
);
使用First_value和Last_value:
SELECT DISTINCT ID_CLIENT FROM
(
SELECT A.*,FIRST_VALUE(AMOUNT) OVER(PARTITION BY ID_CLIENT ORDER BY AMOUNT ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FST_VAL,LAST_VALUE(AMOUNT) OVER(PARTITION BY ID_CLIENT ORDER BY AMOUNT ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) LST_VAL
FROM TABLE1 A
) X WHERE FST_VAL = LST_VAL ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。