0

我正在使用 SQLplus 连接到 oracle 数据库 12c

我有两个表,客户和帐户,其中客户可以有多个帐户(一个客户 ID,但有多种帐户类型)。我正在尝试获取有关债务最多的客户的信息。假设我们有以下信息:

客户表:

BSB#  Customer#  Name  Address
------------------------------
0123  123456     Adam  ABC st
0234  234566     Dave  CBC rd
0345  345667     Max   DSE st

账户表:

BSB#  Customer#  Type    Balance
---------------------------------
0123  123456     Saving  -2300
0123  123456     Credit  -500
0123  123456     iSaver  200
0234  234566     Saving  5000
0345  345667     Credit  -1500
0345  345667     iSaver  -200

所需的输出:

Customer# Name   Address
-------------------------
123456    Adam   ABC St

我可以打印出每个人账户余额的总和,但我不知道如何只打印出累积余额最低的账户的信息。我尝试使用 MIN(SUM(A.Balance)) 但我不断收到错误消息“不是单组函数”。如果我在某个地方犯了错误,我不会感到惊讶。

我对 sql 比较陌生,这就是我到目前为止所拥有的。任何建议或指示都会很好......

SELECT C.Customer#, C.Name, Address, SUM(A.Balance)
FROM Customer C
RIGHT OUTER JOIN Account A
ON C.BSB# = A.BSB#
AND
C.Customer# = A.Customer#
GROUP BY C.Customer#, C.Name, Address;

谢谢!

4

2 回答 2

2

以下将按余额总和对客户进行排序:

SELECT C.Customer#, C.Name, Address, SUM(A.Balance)
FROM Customer C JOIN
     Account A
     ON C.BSB# = A.BSB# AND
        C.Customer# = A.Customer#
GROUP BY C.Customer#, C.Name, Address
ORDER BY SUM(A.Balance);

如果你只想要一行,那么这取决于数据库。这里有一些方法:

更改select为:

SELECT TOP 1 . . . 

在查询末尾添加一个limit子句:

LIMIT 1

在查询末尾添加一个fetch子句:

FETCH FIRST 1 ROWS ONLY

在 Oracle 中,您可以使用子查询来执行此操作:

SELECT *
FROM (SELECT C.Customer#, C.Name, Address, SUM(A.Balance)
      FROM Customer C JOIN
           Account A
           ON C.BSB# = A.BSB# AND
              C.Customer# = A.Customer#
      GROUP BY C.Customer#, C.Name, Address
      ORDER BY SUM(A.Balance)
     ) t
WHERE rownum = 1;
于 2014-04-17T12:49:39.120 回答
0

你可以使用以下语句

    with MinAccounts as 
    ( 
      SELECT BSB#, Customer#, Balance
        FROM (
              SELECT BSB#, t.Customer# , sum(t.Balance) Balance, min(sum(t.Balance)) over () minBalance
                FROM Account t
               GROUP BY BSB#, Customer#
         ) d 
   WHERE Balance = minBalance) 
SELECT * 
  FROM MinAccounts a 
  JOIN Customer c ON a.BSB# = c.BSB#
于 2014-04-17T13:27:33.820 回答