Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo 24-09-2015
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Cita:
Empezado por roman Ver Mensaje

Por cierto, ¿qué son funciones windows?

// Saludos
imaginemos una tabla a la que le hacemos una consulta:
Código SQL [-]
Select Id, Nombre, Sueldo from tabla where fecha between :f1 and :f2


Cita:
Empezado por ResultadoDelQuery
ID / Nomre / Sueldo
1 / Andres / 200
4 / Carlos / 300
9 / Clara / 450
Se puede decir que ese resultado es una ventana que "mira" algo de la información en una tabla, las funciones ventana son funciones que solo tienen dominio sobre ese resultado y en ellas se puede obtener entre otras cosas, el numero de Columna, el máximo valor o el mínimo valor de esa ventana, la sumatoria, en fin, hay muchas cosas que se pueden ver y acá hablan un poco de ello, por ejemplo normalmente si yo quiero sacar un porcentaje del sueldo en la consulta anterior haría algo como:

Código SQL [-]
Select 
  Id, Nombre, Sueldo,
  sueldo / (select sum(sueldo) from tabala  where fecha between :f1 and :f2) porcentaje
from tabla where fecha between :f1 and :f2

con una función window o ventana sería:

Código SQL [-]
Select 
  Id, Nombre, Sueldo,
  sueldo / sum(salary) over () porcentaje
from tabla where fecha between :f1 and :f2

el sum normalmente debe ser usado en un group by, pero al tener la instrucción over después indica que es una función de ventana don el sum se hará sobre todos los valores de el campo sueldo que arroja la consulta, dentro del paréntesis del over pueden ir variqs clausulas de ordenamiento.

Ahora si vemos los dos querys anteriores notaremos que en el primero hay un subquery en el cual tiene su propia carga de información y se está repitiendo gran cantidad de lo que ya se ha hecho, pero además se está haciendo registro por registro, así pues si la tabla tiene 2 millones de registros y se está devolviendo 3 resultados, entonces se hará 3 veces el mismo query consultando sobre 2 millones de registros de la tabla para devolver el sum que se obtiene de apenas tres registros, mientras que en el segundo query con la función de ventana solo se está haciendo un sum sobre 3 registros lo cual deberá repercutir tremendamente en eficiencia y velocidad
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
El acceso mas rapido a MySQL darkerbyte SQL 6 09-05-2012 04:27:55
Ayudenme Rapido, Rapido omarys Varios 6 04-06-2011 09:45:34
Se me llenan las tablas en mysql.. demasiado rápido coletaun Varios 2 16-11-2005 23:05:11
Mysql lento en Win Me y rapido en win 98 miguelb Windows 0 03-02-2005 21:39:00
Mysql lento en Win Me y rapido en win 98 miguelb MySQL 0 30-12-2004 02:22:16


La franja horaria es GMT +2. Ahora son las 01:58:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi