jueves, 9 de junio de 2011

Portafolio tercer corte


SUBQUERY

El subquery es la misma sentencia del SELECT, solo que en vez de poner la condición como tal colocaremos un paréntesis en donde llamaremos otra sentencia SELECT; esto se denomina SELECT anidado. Su sentencia general es:

A continuación varios ejemplos:
1. SELECT valor_pagado FROM tadm_det_pago WHERE num_pago=1;
Nos traerá lo siguiente:
/*trae el valor de 300000*/
2. SELECT valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT valor_pagado FROM tadm_det_pago WHERE num_pago=1);

Esta sentencia esta ajustada a la estructura SUBQUERY y nos traera la siguiente:
/*trae valores menores a la condicion del selecto anidado; en este caso menor a 300000*/
3. SELECT avg(valor_pagado) FROM tadm_det_pago;
Esta sentencia nos dará:

/*promedio de los pagos realizados*/
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nuevamente la ajustamos a un SUBQUERY y nos mostrará:
/*consulta que nos trae el numero de pago y el valor pagado siempre y cuando el pago sea diferente que el promedio de todos los pagos realizados*/

5. SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nos traerá:



EJERCICIO:
Hacer una consulta que traiga aquellos valores pagados que sean mayores al minimo valor pagado en la tabla detalle.
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado>(SELECT min(valor_pagado) FROM tadm_det_pago);

Ahora utilizaremos la siguiente consulta:

SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT min(valor_pagado) FROM tadm_det_pago);

Al probarla no nos mostrará ningún campo debido a que no hay ni un solo valor pagado que sea menor al menor.

Probemos con esta sentencia:
SELECT num_pago, valor_pagado FROM tadm_det_pago WHERE valor_pagado<(SELECT max(valor_pagado) FROM tadm_det_pago);
/*trae los valores menores al maximo valor pagado*/
EJERCICIO:
Hacer una consulta que traiga los maximos valores pagados agrupado por concepto y cuyo promedio sea superior al promedio de los pagos.
SELECT num_pago, max(valor_pagado) FROM tadm_det_pago GROUP BY num_pago HAVING (avg(valor_pagado))>(SELECT avg(valor_pagado) FROM tadm_det_pago);
Nos traerá lo siguiente:

No hay comentarios:

Publicar un comentario