Oracle 甲骨文-根据客户账户,哪家银行持有最多的资金
试图找出哪家银行持有最多的钱Oracle 甲骨文-根据客户账户,哪家银行持有最多的资金,oracle,Oracle,试图找出哪家银行持有最多的钱 SELECT * FROM bank B WHERE BSB IN (SELECT max(balance) FROM registered R, Account A WHERE R.BSB = B.BSB AND A.accountNumber = R.accountNumber); 很难说问题出在哪里,因为您没有提供一份关于发生了什么的声明,但我同意@AlexPoo
SELECT *
FROM bank B
WHERE BSB IN (SELECT max(balance)
FROM registered R, Account A
WHERE R.BSB = B.BSB
AND A.accountNumber = R.accountNumber);
很难说问题出在哪里,因为您没有提供一份关于发生了什么的声明,但我同意@AlexPoole的观点,将
MAX(BALANCE)
与BSB
值(分支?)进行比较可能不是您想要做的。也许以下几点将证明是有用的:
SELECT *
FROM bank B
WHERE BSB = (SELECT BSB
FROM (SELECT R.BSB, SUM(balance)
FROM registered R
INNER JOIN Account A
ON R.BSB = B.BSB AND
R.accountNumber = A.accountNumber
ORDER BY SUM(BALANCE) DESC)
WHERE ROWNUM = 1)
使用CTE(公共表表达式)的稍微干净的版本可能是:
WITH BRANCH_BALANCES AS (SELECT R.BSB, SUM(balance) AS BRANCH_BALANCE
FROM BANK B
INNER JOIN registered R
ON R.BSB = B.BSB
INNER JOIN Account A
ON R.accountNumber = A.accountNumber)
SELECT *
FROM (SELECT BSB, BRANCH_BALANCE
FROM BRANCH_BALANCES
ORDER BY BRANCH_BALANCE DESC)
WHERE ROWNUM = 1
祝你好运。取决于
bank
表中有多少字段,等待最后一个可能的步骤加入并只拉取一条记录可能会有价值(我假设bank.BSB
上有PK或至少and索引)
这个查询的问题是?所以您正在寻找恰好与最高账户余额匹配的分行号码(如果您的分行号码是这样的话)?很可能这不是你的意思,但那是你写的。如果你得到一个错误或错误的结果,说出问题所在总是很有用的;并显示表格结构、数据、当前结果和预期结果。对不起。。我会更详细地解释。。。我希望根据他们持有的账户找到持有最多资金的银行/分行。因此,我认为还应该包含一个“sum()”查询。Cheesfwiw,根据维基百科,“BSB”是澳大利亚的银行州分行代码。我不知道这里是不是这样用的,但我会同意的…:-)
with balances as (
select
r.BSB, sum (a.balance) as balance_total
from
registered r,
account a
where
r.accountNumber = a.accountNumber
group by r.BSB
),
ranked_balances as (
select
BSB, balance_total,
row_number() over (order by balance_total desc) as rn
from balances
)
select
b.*
from
bank b,
ranked_balances ba
where
b.BSB = ba.BSB and
ba.rn = 1