sql >> Base de Datos >  >> RDS >> Database

Tutorial de datos:uso de funciones de ventana

¿Qué son las funciones de ventana?

Las funciones de ventana permiten a los usuarios realizar cálculos con particiones (es decir, subgrupos o secciones) de un conjunto de resultados, normalmente una tabla o los resultados de otra consulta. A diferencia de las funciones de agregación tradicionales, que devuelven un único valor para cada grupo definido en la consulta, las funciones de ventana devuelven un único valor para cada fila de entrada.

¿Cómo son útiles las funciones de ventana?

Las funciones de ventana aumentan la eficiencia y reducen la complejidad de las consultas que analizan particiones (ventanas) de un conjunto de datos al proporcionar una alternativa a conceptos SQL más complejos, p. consultas derivadas. Los casos de uso comunes incluyen:

  • Resultados de clasificación dentro de una ventana específica (por ejemplo, clasificación por grupo)
  • Acceso a datos de otra fila en una ventana específica (por ejemplo, informes de período a período)
  • Agregación dentro de una ventana específica (por ejemplo, totales acumulados):

Cómo usar las funciones de ventana

Las funciones de ventana se inician con OVER y se configuran utilizando tres conceptos:

  • partición de ventana (PARTITION BY ) - agrupa filas en particiones
  • ordenación de ventanas (ORDER BY ) - define el orden o secuencia de filas dentro de cada ventana
  • marco de ventana (ROWS ) - define la ventana mediante el uso de un desplazamiento de la fila especificada

Descripción general de la sintaxis

function (expression) OVER
     ( [ PARTITION BY expression_list ]
       [ ORDER BY order_list ]
       [ ROWS frame_clause ])

Definiciones

  • expression_list:lista de expresiones separadas por comas, generalmente nombres de columnas
  • order_list:lista de expresiones separadas por comas, generalmente nombres de columnas
  • frame_clause:define el desplazamiento usando CURRENT ROW , _value_ PRECEDING , UNBOUNDED PRECEDING , _value_ FOLLOWING , UNBOUNDED FOLLOWING

Ejemplos

Clasificación:clasificación por grupo

SELECT
      campaign
    , month
    , total_cost
    , rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8

Fila anterior:análisis período-sobre-período

SELECT
      campaign
    , month
    , total_cost
    , LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4

Agregación dentro de una ventana:totales acumulados

SELECT
    campaign, month, monthly_cost
  , sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
    PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month

Documentación y lista de funciones:

Tenga en cuenta que existen diferencias sutiles en el uso y la sintaxis de una base de datos a otra. Para obtener información específica de su implementación, utilice la documentación específica de la fuente que se proporciona a continuación.

Postgres

  • Tutorial
  • Funciones

Desplazamiento al rojo

  • Tutorial
  • Funciones

Oráculo

  • Tutorial

Servidor SQL

  • Tutorial

BigQuery

  • Tutorial