现在有2张表,一张表记录了客户信息(客户ID,客户名),另一张表记录了这个客户和发放给他贷款的银行(客户,贷款发放行,贷款额度)。
求列出每个客户对应的提供给该客户最大贷款额度的银行?
比如:客户表:
1 小明
2 小芳客户贷款信息
1 100万 农行
1 200万 中国银行
2 150万 建设银行
2 200万 农行
求出的结果应该为
客户ID 客户名 贷款发放额度最大行
1 小明 中国银行
2 小芳 农行
求高手指点,用ORACLE应该怎么写这个SQL啊?oracle
求列出每个客户对应的提供给该客户最大贷款额度的银行?
比如:客户表:
1 小明
2 小芳客户贷款信息
1 100万 农行
1 200万 中国银行
2 150万 建设银行
2 200万 农行
求出的结果应该为
客户ID 客户名 贷款发放额度最大行
1 小明 中国银行
2 小芳 农行
求高手指点,用ORACLE应该怎么写这个SQL啊?oracle
客户表.id,客户表.name,max(贷款发放额度最大行)
from
客户贷款信息,客户表
where 客户表.id=客户贷款信息.id
group by 客户表.id,客户表.name
客户ID, 客户名
1 小明
2 小芳客户贷款信息
客户ID, 贷款金额 发贷银行
1 100万 农行
1 200万 中国银行
2 150万 建设银行
2 200万 农行select
客户表.id,客户表.name,max(贷款发放额度最大行)
from
客户贷款信息,客户表
where 客户表.id=客户贷款信息.id
group by 客户表.id,客户表.name这个的出的结果不对吧
客户ID, 客户名
1 小明
2 小芳客户贷款信息
客户ID, 贷款金额 发贷银行
1 100万 农行
1 200万 中国银行
1 200万 建设银行
2 150万 建设银行
2 200万 农行有没有高手帮忙看看啊?
这个是典型的,前“N”个查询,按照个人编号进行分组,查询该人的信息,使用常规的SQL来写是比较麻烦的,Oracle在8i以上提供分析函数其目的之一就是为了解决前N个查询的问题。建立测试数据
/*
CREATE TABLE CUSTOM(
CUSTOMID NUMBER(20),
NAME VARCHAR2(40)
)
;
CREATE TABLE LMSG(
CUSTOMID NUMBER(20),
CREDIT NUMBER(20),
BANKNAME VARCHAR2(40)
)
;
INSERT INTO CUSTOM VALUES(1,'小明');
INSERT INTO CUSTOM VALUES(2,'小芳');
INSERT INTO LMSG VALUES(1,100,'农行');
INSERT INTO LMSG VALUES(1,200,'中国银行');
INSERT INTO LMSG VALUES(1,200,'建设银行');
INSERT INTO LMSG VALUES(2,150,'建设银行');
INSERT INTO LMSG VALUES(2,200,'农行');
*/
SELECT CUSTOMID,NAME,CREDIT,BANKNAME FROM
(SELECT ROW_NUMBER() OVER(PARTITION BY A.CUSTOMID ORDER BY B.CREDIT DESC, BANKNAME) RN,
A.CUSTOMID,A.NAME,B.CREDIT,B.BANKNAME
FROM CUSTOM A, LMSG B
WHERE A.CUSTOMID = B.CUSTOMID)
WHERE RN=1;结果为:
CUSTOMID NAME CREDIT BANKNAME
1 小明 200 建设银行
2 小芳 200 农行
CREATE TABLE CUSTOM(
CUSTOMID NUMBER(20),
NAME VARCHAR2(40)
)
;
CREATE TABLE LMSG(
CUSTOMID NUMBER(20),
CREDIT NUMBER(20),
BANKNAME VARCHAR2(40)
)
;
INSERT INTO CUSTOM VALUES(1,'小明');
INSERT INTO CUSTOM VALUES(2,'小芳');
INSERT INTO LMSG VALUES(1,100,'农行');
INSERT INTO LMSG VALUES(1,200,'中国银行');
INSERT INTO LMSG VALUES(1,200,'建设银行');
INSERT INTO LMSG VALUES(2,150,'建设银行');
INSERT INTO LMSG VALUES(2,200,'农行');
*/
SELECT A.CUSTOMID,T0.NAME,MIN(A.BANKNAME)
FROM
CUSTOM T0,
LMSG A,
(select customid,max(CREDIT) max_credit
from LMSG
group by CUSTOMID) B
WHERE
T0.CUSTOMID=A.CUSTOMID
AND A.CUSTOMID=B.CUSTOMID
AND A.CREDIT=B.MAX_CREDIT
GROUP BY A.CUSTOMID,T0.NAME结果
2 小芳 农行
1 小明 中国银行
CREATE TABLE CUSTOM(
CUSTOMID NUMBER(20),
NAME VARCHAR2(40)
)
;
CREATE TABLE LMSG(
CUSTOMID NUMBER(20),
CREDIT NUMBER(20),
BANKNAME VARCHAR2(40)
)
;
INSERT INTO CUSTOM VALUES(1,'小明');
INSERT INTO CUSTOM VALUES(2,'小芳');
INSERT INTO LMSG VALUES(1,100,'农行');
INSERT INTO LMSG VALUES(1,200,'中国银行');
INSERT INTO LMSG VALUES(1,200,'建设银行');
INSERT INTO LMSG VALUES(2,150,'建设银行');
INSERT INTO LMSG VALUES(2,200,'农行');
*/
SELECT A.CUSTOMID,T0.NAME,MIN(A.BANKNAME)
FROM
CUSTOM T0,
LMSG A,
(select customid,max(CREDIT) max_credit
from LMSG
group by CUSTOMID) B
WHERE
T0.CUSTOMID=A.CUSTOMID
AND A.CUSTOMID=B.CUSTOMID
AND A.CREDIT=B.MAX_CREDIT
GROUP BY A.CUSTOMID,T0.NAME
结果是:
customid name BANKNAME
2 小芳 农行
1 小明 中国银行