Artículos

2: Más sobre las funciones


Objetivos de aprendizaje

En este capítulo, aprenderá a:

  • Encuentra dominio y rango de funciones
  • Grafica siete funciones básicas
  • Evaluar funciones definidas por partes
  • Usa transformaciones para bosquejar gráficas de funciones.
  • Grafica funciones cuadráticas usando propiedades
  • Grafica funciones polinomiales usando comportamiento final
  • Identificar asíntotas y bosquejar gráficas de funciones racionales.
  • 2.1: Relaciones y funciones
    • 2.1E: Ejercicios - Relaciones y funciones
  • 2.2: Graficar las funciones básicas
    En esta sección graficamos siete funciones básicas que se utilizarán a lo largo de este curso. Cada función se representa gráficamente trazando puntos.
    • 2.2E: Ejercicios - Graficar las funciones básicas
  • 2.3: Uso de transformaciones para graficar funciones
    • 2.3E: Ejercicios: uso de transformaciones para graficar funciones
  • 2.4: Graficar funciones cuadráticas usando propiedades
    • 2.4E: Ejercicios - Graficar funciones cuadráticas usando propiedades
  • 2.5: Funciones polinomiales
    La palabra raíz "poli" significa "muchos", como en polígono (muchos lados) o políglota (habla muchos idiomas, multilingüe). En álgebra, la palabra polinomio significa "muchos términos", donde la frase "muchos términos" se puede interpretar en cualquier lugar desde uno hasta un número arbitrario, pero finito, de términos. En consecuencia, un monomio podría considerarse un polinomio, al igual que los binomios y los trinomios. En nuestro trabajo, nos concentraremos en su mayor parte en polinomios de una sola variable.
    • 2.5E: Ejercicios - Funciones polinomiales
  • 2.6: Funciones racionales
    En esta sección, nuestro estudio nos llevará a las funciones racionales. Tenga en cuenta la palabra raíz "proporción" en el término "racional". ¿Te recuerda la palabra "fracción"? Debería, ya que las funciones racionales son funciones en una forma fraccionaria muy específica.
    • 2.6E: Ejercicios - Funciones racionales
    • 1.1: Repaso del Capítulo 2

2.5 - Por qué las funciones son útiles y cómo utilizarlas de forma eficaz

Ahora que hemos cubierto qué son las funciones y algunas de sus capacidades básicas, echemos un vistazo más de cerca a por qué son útiles.

Los nuevos programadores a menudo preguntan: "¿No podemos simplemente poner todo el código dentro del principal ¿función?" Para programas simples, absolutamente puede. Sin embargo, las funciones brindan una serie de beneficios que las hacen extremadamente útiles en programas de duración o complejidad no triviales.

  • Organización - A medida que los programas aumentan en complejidad, tener todo el código dentro de la función main () se vuelve cada vez más complicado. Una función es casi como un miniprograma que podemos escribir por separado del programa principal, sin tener que pensar en el resto del programa mientras lo escribimos. Esto nos permite reducir un programa complicado en porciones más pequeñas y manejables, lo que reduce la complejidad general de nuestro programa.
  • Reutilización - Una vez que se escribe una función, se puede llamar varias veces desde el programa. Esto evita el código duplicado ("No se repita") y minimiza la probabilidad de errores de copiar / pegar. Las funciones también se pueden compartir con otros programas, lo que reduce la cantidad de código que debe escribirse desde cero (y volver a probarse) cada vez.
  • Pruebas - Debido a que las funciones reducen la redundancia de código, hay menos código para probar en primer lugar. Además, debido a que las funciones son independientes, una vez que probamos una función para asegurarnos de que funciona, no es necesario volver a probarla a menos que la cambiemos. Esto reduce la cantidad de código que tenemos que probar a la vez, lo que hace que sea mucho más fácil encontrar errores (o evitarlos en primer lugar).
  • Extensibilidad - Cuando necesitamos extender nuestro programa para manejar un caso que no manejaba antes, las funciones nos permiten hacer el cambio en un lugar y hacer que el cambio surta efecto cada vez que se llama a la función.
  • Abstracción - Para utilizar una función, solo necesita saber su nombre, entradas, salidas y dónde vive. No es necesario que sepas cómo funciona ni de qué otro código depende para usarlo. Esto reduce la cantidad de conocimientos necesarios para utilizar el código de otras personas (incluido todo lo que se encuentra en la biblioteca estándar).

Aunque no lo parece, cada vez que utiliza el operador & lt & lt o el operador & gt & gt para realizar entradas o salidas, está utilizando una función proporcionada por la biblioteca estándar que cumple con todos los criterios anteriores.

Usar funciones de manera efectiva

Uno de los mayores desafíos que enfrentan los nuevos programadores (además de aprender el idioma) es comprender cuándo y cómo usar las funciones de manera efectiva. Aquí hay algunas pautas básicas para escribir funciones:

  • Las declaraciones que aparecen más de una vez en un programa generalmente deben convertirse en una función. Por ejemplo, si leemos la entrada del usuario varias veces de la misma manera, ese es un gran candidato para una función. Si generamos algo de la misma manera varias veces, también es un gran candidato para una función.
  • El código que tiene un conjunto bien definido de entradas y salidas es un buen candidato para una función, especialmente si es complicado. Por ejemplo, si tenemos una lista de elementos que queremos ordenar, el código para ordenar sería una gran función, incluso si solo se hace una vez. La entrada es la lista no ordenada y la salida es la lista ordenada.
  • Una función generalmente debe realizar una (y solo una) tarea.
  • Cuando una función se vuelve demasiado larga, complicada o difícil de entender, se puede dividir en varias subfunciones. A esto se le llama refactorización. Hablamos más sobre la refactorización en la lección 3.10 - Encontrar problemas antes de que se conviertan en problemas.

Normalmente, al aprender C ++, escribirás muchos programas que implican 3 subtareas:

  1. Leer entradas del usuario
  2. Calcular un valor a partir de las entradas
  3. Imprimir el valor calculado

Para programas triviales (por ejemplo, menos de 20 líneas de código), algunos o todos se pueden hacer en función principal. Sin embargo, para programas más largos (o simplemente para practicar) cada uno de estos es un buen candidato para una función individual.

Los nuevos programadores a menudo combinan el cálculo de un valor y la impresión del valor calculado en una sola función. Sin embargo, esto viola la regla de oro de "una tarea" para las funciones. Una función que calcula un valor debe devolver el valor a la persona que llama y dejar que la persona que llama decida qué hacer con el valor calculado (como llamar a otra función para imprimir el valor).


2: Más sobre las funciones

Entonces, ¿por qué es útil para los programadores de C dividir sus programas en funciones separadas pero cooperativas? ¿Por qué no escribir todos los programas como un gran `` fragmento '' de declaraciones?

Piense de nuevo en la tarea de la lección anterior, en la que encontró las posiciones de las articulaciones de un ocupante ilegal. En ese programa usaste las funciones de seno y coseno incorporadas.

Esas funciones fueron predefinidas para usted, lo que significa que no tuvo que decirle a la computadora cómo calcular el seno y el coseno de un ángulo. El trabajo de enseñarle a la computadora sobre los senos y cosenos ya se había hecho para usted. Y debido a que ese trabajo de programación ya se había hecho, simplemente podía usar esas funciones en su propio programa, sin preocuparse por cómo funcionaban realmente las funciones seno y coseno en su interior.

Este ejemplo destaca las dos razones más importantes por las que los programadores de C usan funciones.

La primera razón es la reutilización. Una vez que se define una función, se puede utilizar una y otra vez. Puede invocar la misma función muchas veces en su programa, lo que le ahorra trabajo. ¡Imagínese cómo sería la programación si tuviera que enseñarle a la computadora sobre los senos cada vez que necesitara encontrar el seno de un ángulo! ¡Nunca terminarías tu programa!

Otro aspecto de la reutilización es que una sola función se puede utilizar en varios programas diferentes (y separados). Cuando necesite escribir un nuevo programa, puede volver a sus programas anteriores, encontrar las funciones que necesita y reutilizar esas funciones en su nuevo programa. También puede reutilizar funciones que otra persona haya escrito para usted, como las funciones seno y coseno.

La segunda razón es la abstracción. Para utilizar una función en particular, necesita saber lo siguiente:

  1. El nombre de la función
  2. Que hace la función
  3. ¿Qué argumentos debe dar a la función y
  4. Qué tipo de resultado devuelve la función.

Pero tenga en cuenta: si solo desea usar la función en su programa, ¡no tiene que saber cómo funciona en el interior! No es necesario que comprenda nada sobre lo que sucede dentro de la función.

Es como conducir un automóvil o usar un teléfono. Con un automóvil, no es necesario comprender todos los detalles sobre el motor, el tren de transmisión y las ruedas, si todo lo que desea hacer es conducir el automóvil. Del mismo modo, con un teléfono, no es necesario que comprenda todo sobre el sistema telefónico para realizar una llamada.

La única vez que necesita saber cómo funciona una función en el interior es cuando necesita escribir la función o cambiar su funcionamiento. (Es como un automóvil de nuevo, necesita saber cómo funciona un automóvil para construir uno o reparar uno). Pero una vez que una función está escrita y funcionando, no es necesario volver a mirar su interior.

Juntas, estas dos razones hacen que las funciones sean extremadamente útiles - ¡prácticamente esenciales! - para los programadores que escriben programas grandes. La capacidad de dividir un programa en partes abstractas y reutilizables es lo que hace posible escribir programas grandes que realmente funcionen correctamente.


Más información Например, у вас может быть группа функций, используемых для создания отчетов по метрикам:

Вы можете поместить эти функции в группу при их экспорте в файл index.js:

Más información

При развертывании функций вы можете ограничить действие одной группой:


Parámetros formales frente a parámetros reales

Cuando creamos una función, debe representar una acción "genérica" ​​que se puede aplicar en muchas circunstancias. Por ejemplo, si queremos encontrar la calificación promedio, no importa si se trata de una prueba, un cuestionario, una tarea, un examen parcial, etc. cualquier lista de calificaciones ¡podemos calcular un promedio!

. pero si puede ser cualquier lista de calificaciones, ¿cómo sabemos cómo se llamará la lista de calificaciones? La respuesta: no nos importa. Usted, el programador de la función, proporciona su propio nombre para los datos. Esto es muy parecido a cuando un vendedor le llama y lee un guión tratando de venderle algo, le dice: Estimado _introduzca el nombre del cliente aquí_, déjeme venderle nuestro maravilloso producto.

Al escribir una función, el programador debe proporcionar un blanco Para conectar cualquier dato que sea de interés actual, el espacio en blanco debe tener un buen nombre simbólico que diga lo que representará. Aquí hay un ejemplo de función de pseudocódigo:

Dentro de la función average_grade, el nombre list_of_grades se usará en lugar de cualquier variable en la que algún otro usuario haya almacenado sus calificaciones. Por lo tanto, para llamar a la función, podría escribir:

En el código "Mi", las calificaciones se almacenan en la variable "midterm_grades". Dentro de la función, las calificaciones se almacenan en la variable "list_of_grades". Así, durante la ejecución del programa, ambos nombres se referirán a lo mismo pero en diferentes momentos.

El parámetro "list_of_grades" se llama Formal Paramater nuevamente, esto solo significa un nombre de marcador de posición para cualquier posible conjunto de calificaciones.

La variable midterm_grades es la Real paramater. Esto significa "lo que realmente se usa" para esta llamada a la función, como [90, 100, 70]


Llamar a dos funciones desde el mismo onclick [duplicar]

Agregue punto y coma al final de las llamadas a la función para que ambas funcionen.

No creo que el último sea requerido pero bueno, también podría agregarlo en una buena medida.

Puede crear una única función que llame a ambos y luego usarla en el evento.

Puede llamar a las funciones desde dentro de otra función

sin embargo, si está utilizando una declaración de retorno en la función "pagar", la ejecución se detendrá y "cls" no se ejecutará,

NO se recomienda enlazar eventos de html. Esta es la forma recomendada:

Solo para ofrecer algo de variedad, el operador de coma también se puede usar, pero algunos pueden decir "¡noooooo!", Pero funciona:

ponga un punto y coma entre las dos funciones como terminador de instrucciones.


Funciones de gestión

La gestión ha sido descrita como un proceso social que implica la responsabilidad de la planificación y regulación económica y eficaz del funcionamiento de una empresa en el cumplimiento de determinados propósitos. Es un proceso dinámico que consta de varios elementos y actividades. Estas actividades son diferentes de las funciones operativas como marketing, finanzas, compras, etc. Más bien, estas actividades son comunes a todos y cada uno de los gerentes independientemente de su nivel o estatus.

Diferentes expertos han clasificado funciones de gestión. De acuerdo a George & # 038 Jerry, & # 147 Hay cuatro funciones fundamentales de gestión, es decir, planificar, organizar, actuar y controlar & # 148.

Según Henry Fayol, & # 147 administrar es prever y planificar, organizar, mandar, & # 038 controlar & # 148. Mientras que Luther Gullick ha dado una palabra clave & # 146POSDCORB& # 146 donde P significa planificación, O para organización, S para dotación de personal, D para dirección, Co para coordinación, R para informes & # 038 B para presupuestación. Pero las más ampliamente aceptadas son las funciones de gestión dadas por KOONTZ y O & # 146DONNEL, es decir. Planificación, Organizar, Dotación de personal, Dirigente y Controlador.

A efectos teóricos, puede ser conveniente separar la función de gestión, pero prácticamente estas funciones son de naturaleza superpuesta, es decir, son muy inseparables. Cada función se mezcla con la otra & # 038 cada una afecta el desempeño de las demás.

Planificación

Es la función básica de la gestión. Se trata de marcar con tiza un curso de acción futuro & # 038 decidir de antemano el curso de acción más apropiado para el logro de metas predeterminadas. Según KOONTZ, & # 147 planificar es decidir de antemano: qué hacer, cuándo hacerlo & # 038 cómo hacerlo. Cierra la brecha desde donde estamos & # 038 donde queremos estar & # 148. Un plan es un curso de acción futuro. Es un ejercicio de resolución de problemas y toma de decisiones. La planificación es la determinación de cursos de acción para lograr las metas deseadas. Por lo tanto, la planificación es un pensamiento sistemático sobre las formas y los medios para el logro de metas predeterminadas. La planificación es necesaria para garantizar la utilización adecuada de los recursos humanos y no humanos. Todo es omnipresente, es una actividad intelectual y también ayuda a evitar confusiones, incertidumbres, riesgos, desperdicios, etc.

Organizar

Es el proceso de reunir recursos físicos, financieros y humanos y desarrollar relaciones productivas entre ellos para el logro de las metas organizacionales. Según Henry Fayol, & # 147 organizar una empresa es proporcionarle todo lo útil o su funcionamiento, es decir, materia prima, herramientas, capital y personal & # 146s & # 148. Organizar un negocio implica determinar & # 038 proporcionar recursos humanos y no humanos a la estructura organizacional. La organización como proceso implica:

  • Identificación de actividades.
  • Clasificación de agrupaciones de actividades.
  • Asignación de funciones.
  • Delegación de autoridad y creación de responsabilidad.
  • Coordinación de relaciones de autoridad y responsabilidad.

Dotación de personal

Es la función de administrar la estructura de la organización y mantenerla dotada. La dotación de personal ha adquirido una mayor importancia en los últimos años debido al avance de la tecnología, el aumento del tamaño de la empresa, la complejidad del comportamiento humano, etc. agujeros redondos. De acuerdo con Kootz & # 038 O & # 146Donell, & # 147 la función gerencial de la dotación de personal implica manejar la estructura de la organización a través de una selección, evaluación y desarrollo # 038 adecuada y efectiva del personal para cubrir los roles diseñados en la estructura & # 148. La dotación de personal implica:

    (estimar la mano de obra en términos de búsqueda, elegir a la persona y dar el lugar adecuado).
  • Reclutamiento, Selección y Colocación # 038. . . .
  • Promociones & # 038 Transfer.

Dirigente

Es esa parte de la función gerencial la que activa los métodos organizacionales para que funcionen de manera eficiente para el logro de los propósitos organizacionales. Se considera la chispa vital de la empresa que pone en marcha la acción de las personas, porque la planificación, la organización y la dotación de personal son los simples preparativos para realizar el trabajo. La dirección es ese aspecto de personal inerte de la administración que se ocupa directamente de influir, guiar, supervisar y motivar al subordinado para el logro de las metas organizacionales. La dirección tiene los siguientes elementos:

Supervisión- implica supervisar el trabajo de los subordinados por sus superiores. Es el acto de observar & # 038 dirigir el trabajo & # 038 a los trabajadores.

Motivación- significa inspirar, estimular o alentar a los subordinados con celo para trabajar. Se pueden utilizar incentivos positivos, negativos, monetarios y no monetarios para este propósito.

Liderazgo- puede definirse como un proceso mediante el cual el gerente guía e influye en el trabajo de los subordinados en la dirección deseada.

Comunicaciones es el proceso de transmitir información, experiencias, opiniones, etc. de una persona a otra. Es un puente de entendimiento.

Controlador

Implica la medición del logro contra los estándares y la corrección de la desviación, si la hubiera, para asegurar el logro de las metas organizacionales. El propósito del control es asegurar que todo ocurre de conformidad con los estándares. Un sistema de control eficiente ayuda a predecir las desviaciones antes de que realmente ocurran. De acuerdo a Theo Haimann, & # 147 El control es el proceso de verificar si se está progresando adecuadamente hacia los objetivos y metas y actuar si es necesario, para corregir cualquier desviación & # 148. Según Koontz & # 038 O & # 146Donell & # 147, el control es la medición & # 038 de la corrección de las actividades de desempeño de los subordinados para asegurarse de que los objetivos y planes de la empresa deseaban obtenerlos como cumplidos & # 148. Por lo tanto, el control tiene los siguientes pasos:

  1. Establecimiento de desempeño estándar.
  2. Medición del desempeño real.
  3. Comparación del rendimiento real con los estándares y búsqueda de desviaciones, si las hubiera.
  4. Acción correctiva.

Aprenda conceptos de gestión y habilidades n. ° 038 rápidamente con módulos de aprendizaje autodirigidos y ricamente ilustrados fáciles de entender y presentaciones de PowerPoint descargables n. ° 038.

¡Descargue la presentación de demostración ahora !.

Como miembro premium, tiene acceso para ver el contenido completo del curso en línea y descargar presentaciones de PowerPoint para más de 200 cursos en el área de gestión y habilidades.


DOS Batch - Tutorial de funciones

Qué es, por qué es importante y cómo escribir el tuyo.

  1. . tiene un punto de entrada invocable.
  2. . al finalizar, la ejecución continúa justo después del comando que inicialmente llamó a la función.
  3. . funciona igual sin importar desde dónde se llame, incluso cuando se llama a sí mismo de forma recursiva.
  4. . las variables utilizadas dentro de una función no entran en conflicto con variables externas a la función.
  5. . intercambia datos con el código de llamada estrictamente a través de variables de entrada y salida o un código de retorno.
  1. Mantenga limpio el guión principal
  2. Ocultar la complejidad en funciones reutilizables
  3. Probar funciones independientemente del script principal
  4. Agregue más funcionalidad a su secuencia de comandos por lotes simplemente agregando más funciones en la parte inferior
  5. No se preocupe por la implementación de la función, solo pruébela y úsela

Llamar a una función: cómo invocar una función

Crear una función - ¿Qué es una función?

Ejemplo: función con argumentos: un ejemplo que muestra cómo funciona

Ejemplo: llamar a una función: un ejemplo que muestra cómo funciona

  1. El guión principal: comenzando en la línea 1 y terminando con un GOTO: EOF comando que termina el script.
  2. La sección de funciones: llenar la segunda mitad del archivo por lotes con una o más funciones para que se puedan llamar desde el script principal.

Ejemplo: devolución de valores mediante referencia de variable: un ejemplo que muestra cómo funciona

Variables locales en funciones: cómo evitar conflictos de nombres y mantener los cambios de variables locales en la función

Descripción: La SETLOCAL hace que el procesador de comandos haga una copia de seguridad de todas las variables de entorno. Las variables se pueden restaurar llamando ENDLOCAL. Los cambios realizados en im entre son locales para el lote actual. ENDLOCAL se llama automáticamente cuando se alcanza el final del archivo por lotes, es decir, llamando GOTO: EOF.
La localización de variables con SETLOCAL permite usar nombres de variables dentro de una función libremente sin preocuparse por conflictos de nombres con variables usadas fuera de la función.
Texto: Descargar: BatchTutoFunc4.bat
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
@echo apagado

set & quotaStr = No espere cambios, incluso si se usa en la función & quot
set & quotvar1 = Sin cambios para este. ¿Y ahora qué?
echo.aStr antes:% aStr%
echo.var1 antes:% var1%
llamar: myGetFunc var1
echo.aStr después de:% aStr%
echo.var1 después de:% var1%

echo. & amppause & ampgoto: eof

::--------------------------------------------------------
:: - La sección de funciones comienza aquí abajo
::--------------------------------------------------------

: myGetFunc - pasando una variable por referencia
SETLOCAL
set & quotaStr = DosTips & quot
establecer & quot%

Análisis de argumentos de función: cómo recuperar argumentos de función dentro de la función

Pasar argumentos de función: cómo pasar argumentos a la función

Funciones recursivas - Tadaaah.

Ejemplo: El siguiente ejemplo a continuación muestra cómo calcular un número de Fibonacci de forma recursiva. La recursividad se detiene cuando el algoritmo de Fibonacci alcanza un número mayor o igual a un número de entrada dado.
El ejemplo comienza con los números 0 y 1, la función: myFibo se llama a sí misma de forma recursiva para calcular el siguiente número de Fibonacci hasta que encuentra el número de Fibonacci mayor o igual a 1000000000.

1: devuelve la referencia de la variable y el número de Fibonacci actual
:: -- %

3: límite
SETLOCAL
set / a & quotNumber1 =%

3 & quot
set / a & quotNumberN = Number1 + Number2 & quot
if / i% NumberN% LSS% Limit% call: myFibo NumberN,% Number1%,% Limit%
(ENDLOCAL
SI & quot%

Devolución de variables locales: cómo pasar valores devueltos por encima de la barrera ENDLOCAL

Descripción: La pregunta es: al localizar una función a través de SETLOCAL y ENDLOCAL, cómo devolver un valor que se calculó antes de ejecutar ENDLOCAL Cuándo ENDLOCAL restaura todas las variables a su estado original?
La respuesta viene con "expansión variable". El procesador de comandos expande todas las variables de un comando antes de ejecutar el comando. Dejar que el procesador de comandos se ejecute ENDLOCAL y un COLOCAR comando de una vez resuelve el problema. Los comandos se pueden agrupar entre corchetes.
Texto: Descargar: BatchTutoFunc5.bat
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
@echo apagado

set & quotaStr = No espere cambios, incluso si se usa en la función & quot
set & quotvar1 = Se espera que haya cambiado & quot
echo.aStr antes:% aStr%
echo.var1 antes:% var1%
llamar: myGetFunc var1
echo.aStr después de:% aStr%
echo.var1 después de:% var1%

echo. & amppause & ampgoto: eof

::--------------------------------------------------------
:: - La sección de funciones comienza aquí abajo
::--------------------------------------------------------

: myGetFunc - pasando una variable por referencia
SETLOCAL
set & quotaStr = DosTips & quot
(ENDLOCAL
establecer & quot%

1 =% aStr% & quot
)
ir a: eof

: myGetFunc2 - pasando una variable por referencia
SETLOCAL
set & quotaStr = DosTips & quot
ENDLOCAL & ampset & quot%

Devolver valores de forma clásica: la forma clásica de devolver valores y las limitaciones

Devolución de valores a través de referencias: deje que la persona que llama determine cómo devolver el resultado de la función y evitar la necesidad de variables dedicadas

Resumen: definición de un formato estándar para una función por lotes de DOS

Descripción: Con la información aprendida en esta sección, podemos definir un formato estándar para las funciones por lotes de DOS, como se muestra a continuación.
Consulte también el amplio conjunto de funciones de DOS listas para usar proporcionadas por la biblioteca de funciones de DosTips.com.
Texto: Descargar: BatchFunctionTmpl.bat
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
: myFunctionName - descripción de la función aquí
:: -- %

1: descripción del argumento aquí
SETLOCAL
REM .: cuerpo de la función aquí
establecer LocalVar1 =.
establecer LocalVar2 =.
(ENDLOCAL & amp REM - VALORES DEVUELTOS
SI & quot%


Funciones analíticas

Las funciones analíticas calculan un valor agregado basado en un grupo de filas. Se diferencian de las funciones agregadas en que devuelven varias filas para cada grupo. El grupo de filas se denomina ventana y está definido por la cláusula_analítica. Para cada fila, se define una ventana deslizante de filas. La ventana determina el rango de filas que se utilizan para realizar los cálculos de la fila actual. Los tamaños de las ventanas pueden basarse en un número físico de filas o en un intervalo lógico, como el tiempo.

Las funciones analíticas son el último conjunto de operaciones realizadas en una consulta, excepto la cláusula final ORDER BY. Todas las uniones y todas las cláusulas WHERE, GROUP BY y HAVING se completan antes de que se procesen las funciones analíticas. Por lo tanto, las funciones analíticas solo pueden aparecer en la lista de selección o en la cláusula ORDER BY.

Las funciones analíticas se utilizan comúnmente para calcular agregados acumulativos, móviles, centrados y de informes.

La semántica de esta sintaxis se analiza en las secciones siguientes.

Especifique el nombre de una función analítica (consulte la lista de funciones analíticas que sigue a esta discusión sobre semántica).

Las funciones analíticas toman de 0 a 3 argumentos. Los argumentos pueden ser cualquier tipo de datos numérico o cualquier tipo de datos no numérico que se pueda convertir implícitamente en un tipo de datos numérico. Oracle determina el argumento con la precedencia numérica más alta e implícitamente convierte los argumentos restantes a ese tipo de datos. El tipo de retorno es también ese tipo de datos, a menos que se indique lo contrario para una función individual.

"Precedencia numérica" ​​para obtener información sobre la precedencia numérica y la Tabla 2-10, "Matriz de conversión de tipo implícito" para obtener más información sobre la conversión implícita

Utilice OVER analytic_clause para indicar que la función opera en un conjunto de resultados de consulta. Es decir, se calcula después de las cláusulas FROM, WHERE, GROUP BY y HAVING. Puede especificar funciones analíticas con esta cláusula en la lista de selección o la cláusula ORDER BY. Para filtrar los resultados de una consulta en función de una función analítica, anide estas funciones dentro de la consulta principal y luego filtre los resultados de la subconsulta anidada.

Notas sobre la cláusula_analítica: Las siguientes notas se aplican a la cláusula_analítica:

No puede especificar ninguna función analítica en ninguna parte de la cláusula_analítica. Es decir, no puede anidar funciones analíticas. Sin embargo, puede especificar una función analítica en una subconsulta y calcular otra función analítica sobre ella.

Puede especificar OVER analytic_clause con funciones analíticas definidas por el usuario, así como funciones analíticas integradas. Consulte CREAR FUNCIÓN.

Utilice la cláusula PARTITION BY para dividir el conjunto de resultados de la consulta en grupos según uno o más value_expr. Si omite esta cláusula, la función trata todas las filas del conjunto de resultados de la consulta como un solo grupo.

Para usar query_partition_clause en una función analítica, use la rama superior de la sintaxis (sin paréntesis). Para usar esta cláusula en una consulta de modelo (en model_column_clauses) o una combinación externa particionada (en la cláusula_partición_externa), use la rama inferior de la sintaxis (entre paréntesis).

Puede especificar varias funciones analíticas en la misma consulta, cada una con la misma o diferentes claves PARTICIÓN POR.

Si los objetos que se consultan tienen el atributo paralelo, y si especifica una función analítica con query_partition_clause, los cálculos de la función también se paralelizan.

Los valores válidos de value_expr son constantes, columnas, funciones no analíticas, expresiones de función o expresiones que incluyan cualquiera de estas.

Utilice order_by_clause para especificar cómo se ordenan los datos dentro de una partición. Para todas las funciones analíticas, excepto PERCENTILE_CONT y PERCENTILE_DISC (que solo aceptan una clave), puede ordenar los valores en una partición en múltiples claves, cada una definida por un valor_expr y cada una calificada por una secuencia de ordenación.

Dentro de cada función, puede especificar varias expresiones de orden. Hacerlo es especialmente útil cuando se utilizan funciones que clasifican valores, porque la segunda expresión puede resolver vínculos entre valores idénticos para la primera expresión.

Siempre que order_by_clause da como resultado valores idénticos para varias filas, la función devuelve el mismo resultado para cada una de esas filas. Consulte el ejemplo analítico de SUM para ver una ilustración de este comportamiento.

Restricciones de la cláusula ORDER BY Las siguientes restricciones se aplican a la cláusula ORDER BY:

Cuando se usa en una función analítica, order_by_clause debe tomar una expresión (expr). La palabra clave SIBLINGS no es válida (solo es relevante en consultas jerárquicas). La posición (posición) y los alias de columna (c_alias) tampoco son válidos. De lo contrario, este order_by_clause es el mismo que se usó para ordenar la consulta o subconsulta general.

Una función analítica que usa la palabra clave RANGE puede usar múltiples claves de clasificación en su cláusula ORDER BY si especifica cualquiera de estas dos ventanas:

RANGO ENTRE LA FILA PRECEDENTE Y ACTUAL SIN LÍMITES. La forma abreviada de esto es RANGE UNBOUNDED PRECEDING.

RANGO ENTRE FILA ACTUAL Y SIGUIENTE SIN LÍMITES. La forma abreviada de esto es RANGE UNBOUNDED FOLLOWING.

Los límites de ventana distintos de estos dos pueden tener solo una clave de clasificación en la cláusula ORDER BY de la función analítica. Esta restricción no se aplica a los límites de ventana especificados por la palabra clave FILA.

ASC | DESC Especifique la secuencia de ordenamiento (ascendente o descendente). ASC es el predeterminado.

NULOS PRIMERO | NULLS LAST Especifique si las filas devueltas que contienen nulos deben aparecer en primer o último lugar en la secuencia de ordenación.

NULLS LAST es el valor predeterminado para el orden ascendente y NULLS FIRST es el valor predeterminado para el orden descendente.

Las funciones analíticas siempre operan en filas en el orden especificado en order_by_clause de la función. Sin embargo, order_by_clause de la función no garantiza el orden del resultado. Utilice el order_by_clause de la consulta para garantizar el orden del resultado final.

order_by_clause de SELECT para obtener más información sobre esta cláusula

Algunas funciones analíticas permiten windowing_clause. En la lista de funciones analíticas al final de esta sección, las funciones que permiten la cláusula_ventana están seguidas de un asterisco (*).

FILAS | RANGO Estas palabras clave definen para cada fila una ventana (un conjunto físico o lógico de filas) que se utiliza para calcular el resultado de la función. Luego, la función se aplica a todas las filas de la ventana. La ventana se mueve a través del conjunto de resultados de la consulta o la partición de arriba a abajo.

FILAS especifica la ventana en unidades físicas (filas).

RANGE especifica la ventana como un desplazamiento lógico.

No puede especificar esta cláusula a menos que haya especificado order_by_clause. Algunos límites de ventana definidos por la cláusula RANGE le permiten especificar solo una expresión en order_by_clause. Consulte "Restricciones de la cláusula ORDER BY".

El valor devuelto por una función analítica con un desplazamiento lógico es siempre determinista. Sin embargo, el valor devuelto por una función analítica con un desplazamiento físico puede producir resultados no deterministas a menos que la expresión de ordenación dé como resultado una ordenación única. Es posible que deba especificar varias columnas en order_by_clause para lograr este orden único.

ENTRE . Y utilice BETWEEN. Y cláusula para especificar un punto de inicio y un punto final para la ventana. La primera expresión (antes de Y) define el punto de inicio y la segunda expresión (después de Y) define el punto final.

Si omite BETWEEN y especifica solo un punto final, Oracle lo considera el punto de inicio y el punto final se establece de forma predeterminada en la fila actual.

PRECEDENTE SIN LÍMITE Especifique PRECEDENTE SIN LÍMITE para indicar que la ventana comienza en la primera fila de la partición. This is the start point specification and cannot be used as an end point specification.

UNBOUNDED FOLLOWING Specify UNBOUNDED FOLLOWING to indicate that the window ends at the last row of the partition. This is the end point specification and cannot be used as a start point specification.

CURRENT ROW As a start point, CURRENT ROW specifies that the window begins at the current row or value (depending on whether you have specified ROW or RANGE , respectively). In this case the end point cannot be value_expr PRECEDING .

As an end point, CURRENT ROW specifies that the window ends at the current row or value (depending on whether you have specified ROW or RANGE , respectively). In this case the start point cannot be value_expr FOLLOWING .

value_expr PRECEDING or value_expr FOLLOWING For RANGE or ROW :

If value_expr FOLLOWING is the start point, then the end point must be value_expr FOLLOWING .

If value_expr PRECEDING is the end point, then the start point must be value_expr PRECEDING .

If you are defining a logical window defined by an interval of time in numeric format, then you may need to use conversion functions.

NUMTOYMINTERVAL and NUMTODSINTERVAL for information on converting numeric times into intervals

value_expr is a physical offset. It must be a constant or expression and must evaluate to a positive numeric value.

If value_expr is part of the start point, then it must evaluate to a row before the end point.

value_expr is a logical offset. It must be a constant or expression that evaluates to a positive numeric value or an interval literal. Please refer to "Literals" for information on interval literals.

You can specify only one expression in the order_by_clause

If value_expr evaluates to a numeric value, then the ORDER BY expr must be a numeric or DATE datatype.

If value_expr evaluates to an interval value, then the ORDER BY expr must be a DATE datatype.

If you omit the windowing_clause entirely, then the default is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW .

Analytic functions are commonly used in data warehousing environments. In the list of analytic functions that follows, functions followed by an asterisk (*) allow the full syntax, including the windowing_clause .

Oracle Data Warehousing Guide for more information on these functions and for scenarios illustrating their use