Documente Academic
Documente Profesional
Documente Cultură
-- -----------------------------------------------------
-- Table `Cliente`
-- -----------------------------------------------------
CREATE TABLE SYSTEM.CLIENTE(
ID_CLIENTE VARCHAR2(15) NOT NULL,
NOMBRE_CLI VARCHAR2(50) NOT NULL,
APELLIDO1_CLI VARCHAR2(50) NOT NULL,
APELLIDO2_CLI VARCHAR2(50) NULL,
FECHA_NAC_CLI TIMESTAMP DEFAULT TRUNC(SYSDATE) NOT NULL,
EDAD_CLI NUMBER(3,0) NOT NULL CHECK(EDAD_CLI >=18) ,
NOTA VARCHAR(45) NOT NULL,
CONSTRAINT PK_CLIENTE PRIMARY KEY ("ID_CLIENTE")
)TABLESPACE DATA_TX;
CREATE INDEX SYSTEM.INDEX_APELLIDO1_CLI ON SYSTEM.CLIENTE ("APELLIDO1_CLI");
-- -----------------------------------------------------
-- Table `Obligacion`
-- -----------------------------------------------------
CREATE TABLE SYSTEM.OBLIGACION (
ID_OBLIGACION VARCHAR2(15) NOT NULL,
PRODUCTO VARCHAR2(50) NOT NULL,
SALDO_CAPITAL NUMBER(10,2) NOT NULL,
SALDO_MORA NUMBER(10,2) NOT NULL,
INTERESES_CORRIENTES NUMBER(6,2) NOT NULL,
INSTERESES_MORA NUMBER(6,2) NOT NULL,
DIAS_MORA NUMBER DEFAULT 0 NOT NULL CHECK(DIAS_MORA >=0),
CONSTRAINT PK_OBLIGACION PRIMARY KEY ("ID_OBLIGACION")
)TABLESPACE DATA_TX;
CREATE INDEX SYSTEM.INDEX_PRODUCTO ON SYSTEM.OBLIGACION ("PRODUCTO");
-- -----------------------------------------------------
-- table `relacion_cli_obli`
-- -----------------------------------------------------
CREATE TABLE SYSTEM.RELACION_CLI_OBLI(
ID_OBLIGACION VARCHAR2(15) NOT NULL,
ID_CLIENTE VARCHAR2(15) NOT NULL,
TIPO VARCHAR2(8) NOT NULL,
CONSTRAINT PK_RELACION_CLI_OBLI PRIMARY KEY ("ID_OBLIGACION","ID_CLIENTE","TIPO"),
CONSTRAINT FK_CLIENTE FOREIGN KEY ("ID_CLIENTE") REFERENCES SYSTEM.CLIENTE ("ID_CLIENTE") ON
DELETE CASCADE,
CONSTRAINT FK_OBLIGACION FOREIGN KEY ("ID_OBLIGACION") REFERENCES SYSTEM.OBLIGACION
("ID_OBLIGACION") ON DELETE CASCADE
)TABLESPACE DATA_TX;
CREATE INDEX SYSTEM.INDEX_TIPO_CLI ON SYSTEM.RELACION_CLI_OBLI ("TIPO");
PREGUNTAS
1. Se desea conocer los clientes que tienen obligaciones TC, que su saldo capital supera el valor promedio de este
producto Generar un informe por cliente, en el que se evidencie el porcentaje de participación del saldo sobre el
total de la cartera
2. Generar un informe anual (utilice la fecha de actualización y/o fecha de desembolso), en el que se evidencie con
periodicidad mensual el saldo de cada producto y su porcentaje de participación.
Investigar: Hacer la consulta utilizando la cláusula over y sin utilizar la cláusula over (indicar cuál es la diferencia.)
3. Se desea conocer de los clientes multiproducto, con saldo saldo capital consolidado mayor a 30 millones de pesos,
su nombre, el Total de Obligaciones, y el valor de la mínima obligación y el valor de la máxima obligación donde es
deudor.
1
JESUS DAVID FERNANDEZ FUENTES
IVAN CAMILO ROSALES RODRIGUEZ
SELECT C.NOMBRE_CLIENTE, COUNT(O.ID_OBLIGACION) AS CUANTOS, MIN(O.SALDO_CAPITAL) AS
MINIMO, MAX(O.SALDO_CAPITAL) AS MAXIMO
FROM CLIENTE AS C
INNER JOIN RELACION AS REL ON REL.ID_CLIENTE=C.ID_CLIENTE AND REL.TIPO='DEUDOR'
INNER JOIN OBLIGACION AS O ON O.ID_OBLIGACION=REL.ID_OBLIGACION
GROUP BY C.NOMBRE_CLIENTE
) AS A
INNER JOIN
( SELECT C.NOMBRE_CLIENTE, SUM(O.SALDO_CAPITAL) AS SUMA
FROM CLIENTE AS C
INNER JOIN RELACION AS REL ON REL.ID_CLIENTE=C.ID_CLIENTE AND REL.TIPO='DEUDOR'
INNER JOIN OBLIGACION AS O ON O.ID_OBLIGACION=REL.ID_OBLIGACION
GROUP BY C.NOMBRE_CLIENTE
) AS B
ON A.NOMBRE_CLIENTE=B.NOMBRE_CLIENTE AND B.SUMA>3000000 AND A.CUANTOS>1
GROUP BY A.NOMBRE_CLIENTE
4. Se desea conocer por ciclo de mora el porcentaje de participación en Saldo Capital, de toda la cartera del banco.
SELECT
CASE
WHEN DIAS_MORA BETWEEN 1 AND 30 THEN ‘CICLO 1’
WHEN DIAS_MORA BETWEEN 31 AND 60 THEN ‘CICLO 2’
WHEN DIAS_MORA BETWEEN 61 AND 90 THEN ‘CICLO 3’
WHEN DIAS_MORA BETWEEN 91 AND 120 THEN ‘CICLO 4’
WHEN DIAS_MORA BETWEEN 121 AND 150 THEN ‘CICLO 5’
WHEN DIAS_MORA BETWEEN 151 AND 180 THEN ‘CICLO 6’
WHEN DIAS_MORA > 180 THEN ‘CICLO6’
END
FROM SYSTEM.OBLIGACIONES;
5. Se desea conocer por cliente el total de obligaciones que tiene de cada producto
6. Se desea conocer los clientes de tipo Deudor, que tienen tarjeta de credito pero no tienen creditos hipotecarios
(utilizar una consulta escalar (subquery), minus y/o Exists)
SELECT C.NOMBRE_CLI
FROM SYSTEM.CLIENTE C JOIN SYSTEM.RELACION_CLI_OBLI R
ON (C.ID_CLIENTE=R.ID_CLIENTE) AND R.TIPO='DEUDOR'
JOIN SYSTEM.OBLIGACION O
ON (R.ID_OBLIGACION=O.ID_OBLIGACION)
WHERE O.PRODUCTO='TARJETA CREDITO' AND NOT EXISTS (
SELECT * FROM SYSTEM.OBLIGACION OBLI JOIN
SYSTEM.RELACION_CLI_OBLI RCO
ON (RCO.ID_OBLIGACION=OBLI.ID_OBLIGACION) AND
R.TIPO='CRED HIPOTECARIO'
WHERE OBLI.ID_OBLIGACION=O.ID_OBLIGACION
);
2
JESUS DAVID FERNANDEZ FUENTES
IVAN CAMILO ROSALES RODRIGUEZ
7. Generar un informe por cliente, en el que se evidencie el porcentaje de participación del saldo sobre el total de la
cartera
8. Hacer un informe en el cual se evidencien los clientes que son codeudores de obligaciones de Libre inversión, con
un saldo a capital menor a un salario mínimo legal vigente
SELECT C.ID_CLIENTE,C.NOMBRE_CLI,R.TIPO,O.SALDO_CAPITAL
FROM SYSTEM.CLIENTE C
INNER JOIN SYSTEM.RELACION_CLI_OBLI R ON R.ID_CLIENTE=C.ID_CLIENTE AND R.TIPO='COUDEUDOR'
INNER JOIN SYSTEM.OBLIGACION O ON O.ID_OBLIGACION=R.ID_OBLIGACION AND
O.PRODUCTO='MICROCREDITO' AND O.SALDO_CAPITAL<816000;
10. Se requiere conocer los clientes menores a 25 años, que tienen una tarjeta de crédito y tienen más de 30 días de
mora, para realizar un proceso masivo de bloqueo de TC.
3
JESUS DAVID FERNANDEZ FUENTES
IVAN CAMILO ROSALES RODRIGUEZ
GROUP BY C.NOMBRE_CLI
HAVING COUNT(O.ID_OBLIGACION)>=3;
13. Calcule el valor promedio del saldo a capital por tipo de producto
14. Se desea conocer los clientes multiproducto (deudores con más de una obligación), que el máximo “días de mora”
de todas sus obligaciones su encuentre entre 30 y 60 días de mora.
SELECT A.ID_CLIENTE,A.NOMBRE_CLIENTE,A.APELLIDO_CLIENTE,A.DIAS,B.CUENTA
FROM
(
SELECT C.ID_CLIENTE,C.NOMBRE_CLIENTE,C.APELLIDO_CLIENTE, MAX(O.DIAS_MORA) AS DIAS
FROM CLIENTE AS C
INNER JOIN RELACION AS REL ON REL.ID_CLIENTE=C.ID_CLIENTE AND REL.TIPO='DEUDOR'
INNER JOIN OBLIGACION AS O ON O.ID_OBLIGACION=REL.ID_OBLIGACION AND (
SELECT MAX(O.DIAS_MORA) FROM OBLIGACION
) BETWEEN 30 AND 60
GROUP BY C.ID_CLIENTE
) AS A
INNER JOIN
(
SELECT C.ID_CLIENTE, COUNT(O.ID_OBLIGACION) AS CUENTA FROM CLIENTE AS C
INNER JOIN RELACION AS REL ON REL.ID_CLIENTE=C.ID_CLIENTE
INNER JOIN OBLIGACION AS O ON O.ID_OBLIGACION=REL.ID_OBLIGACION
GROUP BY C.ID_CLIENTE
) AS B
ON A.ID_CLIENTE=B.ID_CLIENTE AND B.CUENTA>1
GROUP BY A.ID_CLIENTE
15. Se desea conocer todos los clientes que tienen un producto Tarjeta de Crédito y que solo muestre el saldo a capital
de aquellos que tengan una mora mayor a 30 días de mora. Organizar el saldo capital ascendentemente
SELECT A.ID_CLIENTE,A.NOMBRE_CLIENTE,A.DIAS_MORA,
( CASE WHEN A.DIAS_MORA<30
THEN '-'
ELSE A.SALDO_CAPITAL END) AS SALDO
FROM
(
SELECT C.ID_CLIENTE,C.NOMBRE_CLIENTE,O.DIAS_MORA,O.SALDO_CAPITAL
FROM CLIENTE AS C
INNER JOIN RELACION AS REL ON REL.ID_CLIENTE=C.ID_CLIENTE
INNER JOIN OBLIGACION AS O ON O.ID_OBLIGACION=REL.ID_OBLIGACION AND
O.PRODUCTOS='TARJETA CREDITO'
GROUP BY C.ID_CLIENTE
) AS A
GROUP BY A.ID_CLIENTE
16. Se quiere conocer todos los productos del banco que están al día (con cero días de mora), indicando el saldo capital
consolidado solo de los productos que tienen más de 6 clientes tipo deudores.
SELECT A.PRODUCTOS,
CASE WHEN B.CUANTAS<6
THEN '-'
ELSE B.SUMA END
4
JESUS DAVID FERNANDEZ FUENTES
IVAN CAMILO ROSALES RODRIGUEZ
FROM
(
SELECT O.PRODUCTOS
FROM OBLIGACION AS O
INNER JOIN RELACION AS REL ON REL.ID_OBLIGACION=O.ID_OBLIGACION
INNER JOIN CLIENTE AS C ON C.ID_CLIENTE=REL.ID_CLIENTE AND O.DIAS_MORA=0
GROUP BY O.PRODUCTOS
) AS A
INNER JOIN
(
SELECT O.PRODUCTOS, COUNT(O.ID_OBLIGACION) AS CUANTAS,SUM(O.SALDO_CAPITAL) AS SUMA
FROM OBLIGACION AS O
INNER JOIN RELACION AS REL ON REL.ID_OBLIGACION=O.ID_OBLIGACION AND
REL.TIPO='DEUDOR'
INNER JOIN CLIENTE AS C ON C.ID_CLIENTE=REL.ID_CLIENTE AND O.DIAS_MORA=0
GROUP BY O.PRODUCTOS
) AS B
ON B.PRODUCTOS=A.PRODUCTOS
GROUP BY A.PRODUCTOS