首页 > 解决方案 > 不使用分析进行分组的自加入

问题描述

我正在创建一个程序,目的是返回满足一组条件的第一条记录。

CREATE OR REPLACE VIEW V_ACCOUNTS AS 
SELECT 
A.ID,
A.BALANCE,
A.PRODUCTCODE,
(SELECT COUNT(*) FROM ACCOUNTS A2 WHERE A.CUSTOMERID=A2.CUSTOMERID) CUSTOMER_NUM_ACCOUNTS
FROM ACCOUNTS A

例如

SELECT * FROM V_ACCOUNTS WHERE ROWNUM = 1 AND PRODUCTID = 467 AND CUSTOMER_NUM_ACCOUNTS > 2

这是否可以增强上述查询,从而避免在同一张表上进行自联接?我可以在条件下使用分析吗?性能是一个问题,我想尽可能优化查询。

标签: sqloracleoracle12cself-join

解决方案


COUNT分析功能可能会有所帮助:

create or replace view v_accounts as 
  select 
    a.id,
    a.balance,
    a.productcode,
    count(*) over (partition by a.customerid) customer_num_accounts
from accounts a

推荐阅读