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

Expresiones de tabla comunes:cuándo y cómo usarlas

¿Qué son las expresiones de tabla comunes (CTE)?

Una Expresión de tabla común (CTE) es el conjunto de resultados de una consulta que existe temporalmente y para usar solo dentro del contexto de una consulta más grande. Al igual que una tabla derivada, el resultado de una CTE no se almacena y existe solo durante la consulta. Este artículo se centrará en CTE no recurrentes.

¿Cómo son útiles los CTE?

Los CTE, como las vistas de la base de datos y las tablas derivadas, permiten a los usuarios escribir y mantener consultas complejas más fácilmente a través de una mayor legibilidad y simplificación. Esta reducción de la complejidad se logra al deconstruir consultas normalmente complejas en bloques simples para usar y reutilizar si es necesario, al reescribir la consulta. Ejemplos de casos de uso incluyen:

  • Necesitar hacer referencia a una tabla derivada varias veces en una sola consulta
  • Una alternativa a la creación de una vista en la base de datos
  • Realizar el mismo cálculo varias veces en varios componentes de consulta

Cómo crear un CTE

  • Iniciar un CTE usando "CON"
  • Proporcione un nombre para el resultado de la consulta que pronto se definirá
  • Después de asignar un nombre, siga con "AS"
  • Especifique los nombres de las columnas (paso opcional)
  • Defina la consulta para producir el conjunto de resultados deseado
  • Si se requieren varios CTE, inicie cada expresión subsiguiente con una coma y repita los pasos 2 a 4.
  • Haga referencia a los CTE definidos anteriormente en una consulta posterior

Sintaxis

WITH
expression_name_1 AS
(CTE query definition 1)

[, expression_name_X AS
   (CTE query definition X)
 , etc ]

SELECT expression_A, expression_B, ...
FROM expression_name_1

##Ejemplo CTELa siguiente consulta responde la pregunta comercial:"¿cuál es el costo mensual promedio por campaña para los esfuerzos de marketing de la empresa?" Esto podría lograrse con una consulta derivada (que se muestra a continuación); sin embargo, usar un CTE mejora la legibilidad

-- define CTE:
WITH Cost_by_Month AS
(SELECT campaign_id AS campaign,
       TO_CHAR(created_date, 'YYYY-MM') AS month,
       SUM(cost) AS monthly_cost
FROM marketing
WHERE created_date BETWEEN NOW() - INTERVAL '3 MONTH' AND NOW()
GROUP BY 1, 2
ORDER BY 1, 2)

-- use CTE in subsequent query:
SELECT campaign, avg(monthly_cost) as "Avg Monthly Cost"
FROM Cost_by_Month
GROUP BY campaign
ORDER BY campaign

Usando una consulta derivada:

SELECT campaign, avg(monthly_cost) as "Avg Monthly Cost"
FROM
    -- this is where the derived query is used
    (SELECT campaign_id AS campaign,
       TO_CHAR(created_date, 'YYYY-MM') AS month,
       SUM(cost) AS monthly_cost
    FROM marketing
    WHERE created_date BETWEEN NOW() - INTERVAL '3 MONTH' AND NOW()
    GROUP BY 1, 2
    ORDER BY 1, 2) as Cost_By_Month
GROUP BY campaign
ORDER BY campaign

Documentación

  • Postgres
  • Desplazamiento al rojo
  • Oráculo
  • Servidor SQL