Sql 不使用分析分组的自连接

Sql 不使用分析分组的自连接,sql,oracle,oracle12c,self-join,Sql,Oracle,Oracle12c,Self Join,我正在创建一个程序,目的是返回满足一组条件的第一条记录 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 例如 这是否可以增强上述查询,从而避免在同一个表上进行自联接?我可以使用有

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

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
例如

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

计数
分析功能可能有助于:

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

对正是我想要的。谢谢“第一次”是什么引起的?您是否理解表没有顺序,没有order BY的ROWNUM是任意的?PS请给出[mce]。另外,如果您知道一个productid,那么您应该将它放在您计算的同一个查询中,这样DBMS就不必计算其他productid的行数。仅此一点就应该允许优化器消除这种自连接的任何实现工作。
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